c编写一个控制台程序,在该程序中构造一个Person基类,再分别构造Student和Teacher派生类,要求具有不同的特征和行为,能通过静态成员自动记录由不同派生类创建的对象的人数。
时间: 2024-03-11 09:51:23 浏览: 65
好的,以下是一个简单的实现:
```c
#include <stdio.h>
// 基类 Person
typedef struct {
char name[20]; // 姓名
int age; // 年龄
} Person;
// 派生类 Student
typedef struct {
Person base; // 继承自 Person
int grade; // 年级
} Student;
// 派生类 Teacher
typedef struct {
Person base; // 继承自 Person
char title[20]; // 职称
} Teacher;
// 静态成员变量
static int studentCount = 0;
static int teacherCount = 0;
// 创建 Student 对象
Student* createStudent(char* name, int age, int grade) {
Student* s = (Student*)malloc(sizeof(Student));
strcpy(s->base.name, name);
s->base.age = age;
s->grade = grade;
studentCount++;
return s;
}
// 创建 Teacher 对象
Teacher* createTeacher(char* name, int age, char* title) {
Teacher* t = (Teacher*)malloc(sizeof(Teacher));
strcpy(t->base.name, name);
t->base.age = age;
strcpy(t->title, title);
teacherCount++;
return t;
}
int main() {
// 创建对象
Student* s1 = createStudent("Tom", 18, 1);
Student* s2 = createStudent("Jerry", 17, 2);
Teacher* t1 = createTeacher("Mike", 30, "Professor");
Teacher* t2 = createTeacher("Jane", 35, "Associate Professor");
// 输出对象信息
printf("Student count: %d\n", studentCount);
printf("Teacher count: %d\n", teacherCount);
printf("Student 1: %s, %d years old, Grade %d\n", s1->base.name, s1->base.age, s1->grade);
printf("Student 2: %s, %d years old, Grade %d\n", s2->base.name, s2->base.age, s2->grade);
printf("Teacher 1: %s, %d years old, Title %s\n", t1->base.name, t1->base.age, t1->title);
printf("Teacher 2: %s, %d years old, Title %s\n", t2->base.name, t2->base.age, t2->title);
// 释放对象
free(s1);
free(s2);
free(t1);
free(t2);
return 0;
}
```
这里定义了一个基类 Person,以及两个派生类 Student 和 Teacher。可以通过静态成员变量 studentCount 和 teacherCount 分别记录创建的 Student 和 Teacher 对象的数量。createStudent 和 createTeacher 函数分别用于创建 Student 和 Teacher 对象,并且在创建对象时自动更新静态成员变量。最后在 main 函数中演示了对象的创建和释放,以及输出对象的信息。
阅读全文