从实验6中的people(人员)类派生出student(学生)类,添加属性:班号char classNO[7];从people类派生出teacher(教师)类,添加属性:职务char principalship[11]、部门char department[21]。从student类中派生出graduate(研究生)类,添加属性:专业char subject[21]、导师teacher adviser;从graduate类和teacher类派生出TA(助教生)类,注意虚基类的使用。重载相应的成员函数,测试这些类
时间: 2024-01-25 13:05:07 浏览: 75
好的,让我们按照您的要求来实现这个派生类的继承关系。首先,我们需要定义People(人员)类,它有两个成员变量:姓名和年龄。
```cpp
class People {
public:
string name;
int age;
};
```
然后,我们从People类派生出Student(学生)类,并添加班号属性。注意,我们将classNO定义为char类型的数组,而不是string类型。
```cpp
class Student : public People {
public:
char classNO[7];
};
```
接下来,我们从People类派生出Teacher(教师)类,并添加职务和部门属性。
```cpp
class Teacher : public People {
public:
char principalship[11];
char department[21];
};
```
然后,我们从Student类派生出Graduate(研究生)类,并添加专业和导师属性。
```cpp
class Graduate : public Student {
public:
char subject[21];
Teacher *adviser;
};
```
注意,我们使用了指向Teacher对象的指针来表示导师,这样我们可以在Graduate类中使用Teacher类中的成员变量和函数。
最后,我们从Graduate类和Teacher类派生出TA(助教生)类,使用虚基类来避免多重继承带来的问题。
```cpp
class TA : public virtual Graduate, public virtual Teacher {
public:
char course[21];
};
```
注意,我们使用了virtual关键字来声明Graduate和Teacher作为虚基类,这将确保TA类中只有一个实例的Graduate和Teacher成员变量。
接下来,我们可以重载相应的成员函数来测试这些类。
```cpp
class People {
public:
string name;
int age;
virtual void introduce() {
cout << "我叫" << name << ",今年" << age << "岁。" << endl;
}
};
class Student : public People {
public:
char classNO[7];
virtual void introduce() {
cout << "我叫" << name << ",今年" << age << "岁,班号是" << classNO << "。" << endl;
}
};
class Teacher : public People {
public:
char principalship[11];
char department[21];
virtual void introduce() {
cout << "我叫" << name << ",今年" << age << "岁,职务是" << principalship << ",在" << department << "工作。" << endl;
}
};
class Graduate : public Student {
public:
char subject[21];
Teacher *adviser;
virtual void introduce() {
cout << "我叫" << name << ",今年" << age << "岁,班号是" << classNO << ",专业是" << subject << ",导师是" << adviser->name << "。" << endl;
}
};
class TA : public virtual Graduate, public virtual Teacher {
public:
char course[21];
virtual void introduce() {
cout << "我叫" << name << ",今年" << age << "岁,班号是" << classNO << ",专业是" << subject << ",导师是" << adviser->name << ",负责的课程是" << course << "。" << endl;
}
};
```
在上面的代码中,我们重载了每个类中的introduce()函数,并使用cout语句输出了每个类的成员变量。现在,我们可以使用以下代码来测试这些类:
```cpp
int main() {
Student s;
strcpy(s.name, "张三");
s.age = 18;
strcpy(s.classNO, "A12345");
Teacher t;
strcpy(t.name, "李四");
t.age = 35;
strcpy(t.principalship, "讲师");
strcpy(t.department, "计算机科学与技术");
Graduate g;
strcpy(g.name, "王五");
g.age = 24;
strcpy(g.classNO, "B54321");
strcpy(g.subject, "计算机应用技术");
g.adviser = &t;
TA ta;
strcpy(ta.name, "赵六");
ta.age = 22;
strcpy(ta.classNO, "B12345");
strcpy(ta.subject, "计算机科学与技术");
ta.adviser = &t;
strcpy(ta.course, "数据结构");
People *p;
p = &s;
p->introduce();
p = &t;
p->introduce();
p = &g;
p->introduce();
p = &ta;
p->introduce();
return 0;
}
```
在这个例子中,我们创建了一个Student对象、一个Teacher对象、一个Graduate对象和一个TA对象,并将它们的成员变量初始化为一些值。然后,我们使用一个指向People对象的指针来调用每个对象的introduce()函数。输出结果应该是:
```
我叫张三,今年18岁,班号是A12345。
我叫李四,今年35岁,职务是讲师,在计算机科学与技术工作。
我叫王五,今年24岁,班号是B54321,专业是计算机应用技术,导师是李四。
我叫赵六,今年22岁,班号是B12345,专业是计算机科学与技术,导师是李四,负责的课程是数据结构。
```
希望这个例子可以帮助您理解如何从一个类派生出另一个类,并且如何使用虚基类来避免多重继承带来的问题。如果您有任何问题,请随时问我。
阅读全文