编程语言
C++
继承与派生
11、多重继承派生类的构造函数
问题描述
声明一个教师(Teacher)类和一个学生(Student)类,用公有多重继承的方式声明一个在职研究生(Graduate)派生类,包含私有成员wages(津贴)。教师类中包含保护数据成员name(姓名)、age(年龄)、title(职称)。学生类中包含保护数据成员name1(姓名)、sex(性别)、score(成绩)。在定义派生类对象时给出初始化的数据,然后输出这些数据。
要求Teacher与Student类的数据成员都在自己的构造函数内初始化,新建Graduate对象时,Graduate应通过自身的构造函数去依次调用Teacher与Student的构造函数及其他。
部分代码已在下面给出,请在已有代码上补全,要求不能改动已有代码。
int main() {
Graduate grad1("Johnson", 21, "male", "assistant", 90, 7800);
grad1.show();
return 0;
}
参考代码
#include <iostream>
#include <string>
using namespace std;
class Teacher
{
public:
Teacher(string nam, int a, string tit) : name(nam), age(a), title(tit) {}
protected:
string name;
int age;
string title;
};
class Student
{
public:
Student(string nam, string s, int sco) : name1(nam), sex(s), score(sco) {}
protected:
string name1;
string sex;
int score;
};
class Graduate : public Teacher, public Student
{
public:
Graduate(string nam, int a, string s, string tit, int sco, int w) : Teacher(nam, a, tit), Student(nam, s, sco) { wages = w; }
void show()
{
cout << "name:" << name << "age:" << age << "sex:" << sex << "score:" << score << "title:" << title << "wages:" << wages;
}
private:
int wages;
};
int main()
{
Graduate grad1("Johnson", 21, "male", "assistant", 90, 7800);
grad1.show();
return 0;
}
12、包含子对象的派生类的构造函数
问题描述
现有一Student类,包含两个保护成员num与name,分别表示学号与姓名;另有一Student1类,公共继承自Student类,并且包含一个私有的Student类型的monitor与一个私有的age。
现要求构造一个Student1类型的stu对象,其中的monitor对象必须在Student1的构造函数中通过调用Student的构造函数的方式进行初始化。最后,通过stu对象调用show方法依次输出stu的学号与姓名以及年龄。
部分代码已在下面给出,请在已有代码上补全,要求不能改动已有代码。
int main(){
Student1 stu(20120107, "Johnson", 20);
stu.show();
return 0;
}
参考代码
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
Student(int n, string nam) : num(n), name(nam) {}
protected:
int num;
string name;
};
class Student1 : public Student
{
public:
Student1(int n, string nam, int a) : Student(n, nam), monitor(n, nam) { age = a; }
void show()
{
cout << num << " " << name << " " << age << endl;
}
private:
Student monitor;
int age;
};
int main()
{
Student1 stu(20120107, "Johnson", 20);
stu.show();
return 0;
}
运算符的重载
13、使用转换构造函数来实现两个对象之间的转换
问题描述
定义一个Teacher类,包含私有属性号码(num)、姓名(name)、性别(sex)、职称(title);
一个Student类,包含公有属性号码(num)、姓名(name)、性别(sex)、成绩(grade),
二者有一部分数据成员是相同的:号码(num)、姓名(name)、性别(sex)。
编写程序,使用转换构造函数,将一个Student对象转换为Teacher对象,并且只将Student对象的号码(num)、姓名(name)、性别(sex)移植给Teacher对象。
部分代码已在下面给出,请在已有代码上补全,要求不能改动已有代码。
int main()
{
Student s(20160103, "Johnson", "male", 100);
Teacher t = s;
t.display();
return 0;
}
参考代码
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
Student(int a, string b, strin