-
题目
定义学生类,有姓名,学号,性别,年龄等私有成员变量,有构造和析构函数,有打印信息的成员函数。
要求通过构造函数可以给属性赋予初始值。
定义大学生类,继承自学生类,大学生有专业名、成绩的私有成员变量,还有是否获得奖学金的成员函数(成绩为判断依据)。隐藏基类打印信息的成员函数,新的打印信息的成员函数也要能打印姓名、学号、性别、年龄信息。
要求通过构造函数可以给属性赋予初始值。
再定义研究生类,继承自大学生类,有导师姓名和工资的私有成员变量,有打印工资这个成员函数。
要求通过构造函数可以给属性赋予初始值。
-
代码展示
#include <iostream> using namespace std; class Student { private: string name; int number; string gender; int age; public: //构造函数初始化 Student(string n,int num,string g,int a):name(n),number(num),gender(g),age(a){} //对外部开放只读接口 string get_name() { return name; } int get_number() { return number; } string get_gender() { return gender; } int get_age() { return age; } //析构函数 virtual ~Student() { } virtual void show() { cout << name << " " << number << " " << gender << " " << age << endl; } }; class CollegeStudent:public Student //继承Student类 { private: string major; double score; public: CollegeStudent(string n,int num,string g,int a,string m,double s):Student(n,num,g,a),major(m),score(s){} //一开始出错处 void scholarship(double score) { if(score > 90) { cout << "获得奖学金" <<endl; } else { cout << "无奖学金" << endl; } } void show() { cout << get_name() << " " << get_number() << " " << get_gender() << " " << get_age() << endl; cout << major << " " << score << endl; } }; class GraduateStudent:public CollegeStudent { private: string teacher; double wage; public: GraduateStudent(string n,int num,string g,int a,string m,double s,string t,double w):CollegeStudent(n,num,g,a,m,s),teacher(t),wage(w){} //同样一开始出错处 void show() { cout << wage << endl; } }; int main() { //Student s("张三",11,"男",19); //s.show(); CollegeStudent cs("张三",11,"男",19,"计算机",91); cs.show(); cs.scholarship(91); GraduateStudent gs("张三",11,"男",19,"计算机",91,"周杰伦",1000); //赋值需一致 gs.show(); return 0; }
-
问题描述
派生类继承来自基类,除了自己的成员,还包括基类的成员,而构造函数无法被继承,所以在创建对象时,它的值是赋给的基类还是派生类就出现了歧义,也就是所谓的二义性 -
解决办法
派生类构造函数方式:派生类名(父子类成员参数列表):基类类名(基类参数列表),派生类新增数据成员(参数 列表)
派生类的构造函数初始化问题以及解决办法
于 2022-09-19 21:19:08 首次发布