C++如何将Person类构造参数继承到Student、Teacher子类并新增属性
解决方法
C++中派生类需要通过构造函数初始化列表显式调用基类的带参构造,完成基类属性的初始化,具体修改如下:
核心修改逻辑
- 子类构造函数的入参需要先包含基类Person构造需要的所有6个参数,再追加自身新增属性的参数
- 在子类构造函数的初始化列表中先调用基类Person的构造函数传入对应参数,再初始化自身新增属性
代码修改示例
1. Student类修改
class Student: public Person{ public: int roll; string favoriteSubject; // 构造函数入参:先接基类6个参数,再接自身2个参数 Student(string a, string b, string c, int d, string e, string f, int r, string fs) : Person(a, b, c, d, e, f), roll(r), favoriteSubject(fs) { // 可按需添加子类自定义初始化逻辑,无需求则留空 } };
2. Teacher类修改
class Teacher: public Person{ public: string subject; // 构造函数入参:先接基类6个参数,再接自身1个参数 Teacher(string a, string b, string c, int d, string e, string f, string s) : Person(a, b, c, d, e, f), subject(s) { // 可按需添加子类自定义初始化逻辑,无需求则留空 } };
优化建议
原基类Person的构造函数里输出写死了Student name,给Teacher实例使用时会输出内容不符的问题,建议修改为通用内容:
// 将Person构造函数中第一行输出修改为 cout << "Name: " << name << endl; // 第二行输出也可修改为通用的 "Identity: " << level << 适配所有派生类
调用示例
int main() { // 实例化Student对象 Student stu("张三", "大三", "计算机2组", 21, "138xxxx1234", "男", 2023001, "计算机组成原理"); // 实例化Teacher对象 Teacher tea("李丽", "副教授", "计算机系教研1组", 38, "139xxxx5678", "女", "C++程序设计"); return 0; }
内容的提问来源于stack exchange,提问作者Md. Maruf Sarker
相关产品推荐
相关产品推荐

