如何在新的派生对象中获取基础对象的数据?
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。
现在说说你的错误:
您使用 void
作为 main
,但对于 c++,您只能使用 int
。
您使用 std::string
作为 printf
的参数,但它不能接受它。 (我通过了 std::string
的 c_string
来更正)。
您使用一个来自父对象 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);
}
(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。
现在说说你的错误:
您使用
void
作为main
,但对于 c++,您只能使用int
。您使用
std::string
作为printf
的参数,但它不能接受它。 (我通过了std::string
的c_string
来更正)。您使用一个来自父对象 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);
}