【发布时间】:2019-10-21 17:34:19
【问题描述】:
我正在尝试将 Employee 和 Student 这两个父类的数据继承到Manager。我已经创建了每个类的 set 和 get 函数,并且我在子类中创建了一个 show 函数,它也将显示两个父类的数据。但是当我制作设置值的对象和调用函数然后显示数据,仅显示子类的数据。 谁能告诉我为什么会这样,我该如何解决?感谢您的帮助。
代码如下:
class Employee{
protected:
string name;
int number;
public:
Employee(){
name = "";
number = 0;
}
void set_name(string a){
name = a;
}
void set_number(int a){
number = a;
}
string get_name(){
return name;
}
int get_number(){
return number;
}
};
class Student{
protected:
string school;
string degree;
public:
Student(){
school = "";
degree = "";
}
void set_school(string a){
school = a;
}
void set_degree(string a){
degree = a;
}
string get_school(){
return school;
}
string get_degree(){
return degree;
}
};
class Manager:protected Employee, protected Student{
protected:
string title;
int dues;
public:
Manager(){
title = "";
dues = 0;
}
void set_title(string a){
title = a;
}
void set_dues(int a){
dues = a;
}
string get_title(){
return title;
}
int get_dues(){
return dues;
}
void show_data(){
cout << Employee::get_name();
cout << Employee::get_number() << endl;
cout << Student::get_school() << endl;
cout << Student::get_degree() << endl;
cout << get_title() << endl;
cout << get_dues() << endl;
}
};
int main(){
Employee emp;
Student stu;
Manager man;
emp.set_name("Fahad");
emp.set_number(10);
stu.set_school("COMSAT");
stu.set_degree("BSCS");
man.set_title("Manager Title");
man.set_dues(100);
man.show_data();
return 1;
}
【问题讨论】:
-
我想你这里有误会
stu、emp和man是不同类的独立实例,彼此无关。例如emp.set_name("Fahad");不会改变man中的任何内容,因此不会影响输出。 -
这并没有解决问题,但是受保护的成员和受保护的继承非常罕见。通常,数据成员是私有的,而继承是公共的。如果有充分的理由使用受保护,请务必这样做,但我在这里没有看到。
-
@PeteBecker 但是如果我在父类中将数据成员设为私有,那么我不能在子类中继承这些数据成员,或者我可以吗?
-
@Fahad -- 基类的数据成员被继承,无论它们是私有的、受保护的还是公共的。如果它们是私有的,则派生类和外部人员无法使用它们的名称 来访问它们。但是访问器函数仍然存在,它们可以用来设置和读取值。
标签: c++