(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”。
您已经将成员变量设置为public
,但这不是OOP
的正确方法,正确的方法是将它们置于私有访问说明符下,并使用setter和getter。
现在谈谈你的错误:
>
您对main
使用void
,但对于C++,您只能对它使用int
。
您使用std::string
作为printf
的参数,但它不能接受它。 (我传递了std::string
的c_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;
}