qcode
  • 创作工场专业版,一问多答!更智能、更完整、更原创
  • 这是一个超强内容创作平台,它会写文章、做设计、绘图、敲代码,有问必答!
🔥点击使用-免登录深度版🔥

设计基类Person及其派生的学生和教师类,并编写主函数的C++代码

时间2023-09-27 10:40:48 提问来自 四川省成都市 的网友 分类创作 浏览386
首先,我们需要创建一个基类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'; // 将性别字符恢复为原始值,以便正确打印性别等信息

不满意?免费深度重写!

免责声明:
以上内容除特别注明外均来源于网友提问,创作工场回答,未经许可,严谨转载。

上一篇 现在小红书聚光,还是要投放三天后才可以提到微信和联系方式吗 下一篇 建设教育强国的青年力 量