使用C++语言以及指针定义一个People类最为基类,然后分别定义学生类Student和Teacher类,这两个类公有继承自People类,编写show函数实现多态性(对于学生输出学号,对于教师输出教师号)
时间: 2023-06-11 09:09:18 浏览: 126
首先我们可以定义一个基类People,包含姓名和年龄属性。然后在People类中定义一个虚函数show(),用于实现多态性。代码如下:
```c
#include <stdio.h>
// 基类 People
typedef struct {
char *name;
int age;
void (*show)(void *self); // 虚函数
} People;
// 学生类 Student
typedef struct {
People base;
int stu_id;
} Student;
void Student_show(void *self) {
Student *s = (Student *)self;
printf("Name: %s, Age: %d, Student ID: %d\n", s->base.name, s->base.age, s->stu_id);
}
// 教师类 Teacher
typedef struct {
People base;
int teacher_id;
} Teacher;
void Teacher_show(void *self) {
Teacher *t = (Teacher *)self;
printf("Name: %s, Age: %d, Teacher ID: %d\n", t->base.name, t->base.age, t->teacher_id);
}
int main() {
// 定义学生对象
Student s = {
.base = {
.name = "Tom",
.age = 20,
.show = &Student_show // 重载虚函数
},
.stu_id = 1001
};
// 调用show函数
s.base.show(&s);
// 定义教师对象
Teacher t = {
.base = {
.name = "Jerry",
.age = 35,
.show = &Teacher_show // 重载虚函数
},
.teacher_id = 2001
};
// 调用show函数
t.base.show(&t);
return 0;
}
```
在这个代码中,我们定义了一个基类People,其中包含了姓名和年龄两个属性,还定义了一个虚函数show()。接着,我们定义了学生类Student和教师类Teacher,它们都继承自People类,并且分别添加了学号和教师号属性。此外,我们还分别为学生类和教师类定义了show函数,以实现多态性。
在主函数中,我们分别定义了一个学生对象和一个教师对象,并调用它们的show函数,可以看到输出结果中分别输出了学生号和教师号。
阅读全文