Как получить данные базового объекта в новом производном объекте? - PullRequest
0 голосов
/ 21 июня 2020

(Новичок в OOP.) У меня есть класс person, в котором хранится имя человека. В экземпляре производного класса printer мне нужно это имя, чтобы я мог выполнять с ним дальнейшие задачи.

#include <iostream>
#include <string>
class Person{
  public:
  std::string name;
};

class Printer: public Person{
  public:
  void print(){
      printf("%s", this->name.c_str());  
  }
};
int main() {
    Person one;
    one.name = "john";
    Printer printer;
    printer.print();
    return 0;
}

Что я не делаю, чтобы printer видел данные в one? У меня было бы несколько printer -подобных объектов, поэтому цель здесь - сохранить «john» только один раз.

1 Ответ

1 голос
/ 21 июня 2020

Вы создали переменные-члены public, но это неправильный подход для OOP, правильный - иметь их под спецификатором частного доступа и использовать сеттеры и геттеры.

Теперь, чтобы ваши ошибки:

  1. Вы используете void для main, но с С ++ вы можете использовать только int для него.

  2. Вы используйте std::string в качестве аргумента для printf, но он не может его принять. (Я передал c_string из std::string, чтобы исправить это).

  3. Вы используете объект из родительского класса и даете ему имя, а затем используете другой объект из ведомый, чтобы напечатать имя первого. (Я использовал только один)

#include <iostream>
#include <string>

class Person{
public:
    std::string name;
};

class Printer: public Person{
public:
    void print(){
        printf("%s",this-> name.c_str());
    }
};
int main() {
    Printer printer;
    printer.name = "name";
    printer.print();
}

После ваших комментариев я обновил класс Printer, чтобы выполнить ваше намерение

#include <iostream>
#include <string>
class Person{
public:
    std::string name;
};

class Printer{
public:
    void print(const Person& person ){
        printf("%s", person.name.c_str());
    }
};
int main() {
    Person one;
    one.name = "name";
    Printer printer;
    printer.print(one);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...