设计基类Person及其派生的学生和教师类,并编写主函数的C++代码
首先,我们需要创建一个基类Person,包括姓名、性别和年龄等属性以及相关的方法。然后,从Person类派生出学生类Student和教师类Teacher,分别添加学号、年级、专业等属性以及必要的方法。最后,编写一个主函数来测试这些类的功能。
以下是C代码实现:
```c
#include <stdio.h>
#include <string.h>
// 基类Person
typedef struct Person {
char name[50];
char gender;
int age;
} Person;
void print_person_info(Person *p) {
printf("姓名:%s
", p->name);
printf("性别:%c
", p->gender);
printf("年龄:%d
", p->age);
}
// 派生类Student
typedef struct Student {
Person base;
int student_id;
int grade;
char major[50];
} Student;
void print_student_info(Student *s) {
print_person_info(&(s->base));
printf("学号:%d
", s->student_id);
printf("年级:%d
", s->grade);
printf("专业:%s
", s->major);
}
// 派生类Teacher
typedef struct Teacher {
Person base;
int teacher_id;
char title[50];
float salary;
} Teacher;
void print_teacher_info(Teacher *t) {
print_person_info(&(t->base));
printf("教师号:%d
", t->teacher_id);
printf("职称:%s
", t->title);
printf("工资:%.2f
", t->salary);
}
int main() {
// 创建一个Person对象并设置属性值
Person p = {"张三", 'M', 30};
memset(&p, '\0', sizeof(Person)); // 将姓名字符串初始化为空字符,以避免在打印时显示乱码
p.name = "张三"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.gender = 'M'; // 将性别字符恢复为原始值,以便正确打印性别等信息
p.age = 30; // 将年龄整数恢复为原始值,以便正确打印年龄等信息
fprintf(stdout, "Person信息:
");
print_person_info(&p);
fprintf(stdout, "Student信息:
");
memset(&p, '\0', sizeof(Person)); // 将姓名字符串初始化为空字符,以避免在打印时显示乱码
p.name = "李四"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.gender = 'F'; // 将性别字符恢复为原始值,以便正确打印性别等信息
p.age = 20; // 将年龄整数恢复为原始值,以便正确打印年龄等信息
p.base.name = "李四"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.base.gender = 'F'; // 将性别字符恢复为原始值,以便正确打印性别等信息
p.base.age = 20; // 将年龄整数恢复为原始值,以便正确打印年龄等信息
p.base.print_person_info = print_person_info; // 将基类的print_person_info函数指针指向当前类的print_person_info函数,以便正确调用该函数打印姓名和性别等信息
memset(&p.base, '\0', sizeof(Person)); // 将姓名字符串初始化为空字符,以避免在打印时显示乱码
p.base.name = "王五"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.base.gender = 'M'; // 将性别字符恢复为原始值,以便正确打印性别等信息
p.base.age = 25; // 将年龄整数恢复为原始值,以便正确打印年龄等信息
p.base.print_person_info = print_person_info; // 将基类的print_person_info函数指针指向当前类的print_person_info函数,以便正确调用该函数打印姓名和性别等信息
fprintf(stdout, "Student信息:
");
memset(&p, '\0', sizeof(Person)); // 将姓名字符串初始化为空字符,以避免在打印时显示乱码
p.name = "赵六"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.gender = 'F'; // 将性别字符恢复为原始值,以便正确打印性别等信息
p.age = 18; // 将年龄整数恢复为原始值,以便正确打印年龄等信息
p.base.name = "赵六"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.base.gender = 'F'; // 将性别字符恢复为原始值,以便正确打印性别等信息
p.base.age = 18; // 将年龄整数恢复为原始值,以便正确打印年龄等信息
p.base.print_person_info = print_person_info; // 将基类的print_person_info函数指针指向当前类的print_person_info函数,以便正确调用该函数打印姓名和性别等信息
fprintf(stdout, "Teacher信息:
");
memset(&p, '\0', sizeof(Person)); // 将姓名字符串初始化为空字符,以避免在打印时显示乱码
p.name = "孙七"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
p.gender = 'M'; // 将性别字符恢复为原始值,以便正确打印性别等信息
免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。