提问者:小点点

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


(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”。


共2个答案

匿名用户

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

现在谈谈你的错误:

>

  • 您对main使用void,但对于C++,您只能对它使用int

    您使用std::string作为printf的参数,但它不能接受它。 (我传递了std::stringc_string)。

    您使用父类中的一个对象并给它一个名称,然后使用驱动类中的另一个对象来打印第一个对象的名称。 (我只用了一个)

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

  • 匿名用户

    one和printer是不同的对象(类的实例)。

    #include <iostream>
    class Person{
      public:
      std::string name;
    };
    
    class Printer: public Person{
      public:
      void print(){
          printf("%s", this->name.c_str());  
      }
    };
    int main() {
        Person one; // has one data member 'name'
        one.name = "john";
    
        Printer printer; // has data member 'name' + member function print
        printer.name = "john2";
        printer.print();
        return 0;
    }