aiaiask.com©

开花即结果 提问即答案

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

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

首先,我们需要创建一个基类Person,包括姓名、性别和年龄等属性以及相关的方法。然后,从Person类派生出学生类Student和教师类Teacher,分别添加学号、年级、专业等属性以及必要的方法。最后,编写一个主函数来测试这些类的功能。

以下是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 = "孙七"; // 将姓名字符串恢复为原始值,以便正确打印姓名和性别等信息
设计基类Person及其派生的学生和教师类,并编写主函数的C++代码
https://www.aiaiask.com/ask/48640.html
AI / 模型iFLYTEK
时间 / DATESeptember 27, 2023, 10:40 AM
语言zh-CN
IP / 区域四川 成都