如何在新的派生对象中获取基础对象的数据?

How to get base object's data in a new derived object?

(OOP 初学者。) 我有一个 person class 来存储人名。在派生的 class 实例 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”一次是这里的目标。

您已经创建了成员变量 public 但这不是 OOP 的正确方法,正确的方法是将它们置于私有访问说明符下并使用 setter 和 getter。

现在说说你的错误:

  1. 您使用 void 作为 main,但对于 c++,您只能使用 int

  2. 您使用 std::string 作为 printf 的参数,但它不能接受它。 (我通过了 std::stringc_string 来更正)。

  3. 您使用一个来自父对象 class 的对象并为其命名,然后使用另一个来自驱动对象的对象来打印第一个对象的名称。 (我只用了一个)

#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 class 以实现您的意图

#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);
}