定义一个人工智能学院大一学生类,派生出男生和女生类,利用私有继承输出男生数量和女生数量数,其中可以结合构造函数和析构函数完成,要求在类内定义一个静态成员变量来统计学生总人数。
时间: 2024-01-24 21:01:52 浏览: 32
好的,下面是代码实现:
```cpp
#include <iostream>
using namespace std;
class AI_Student {
private:
static int total; // 静态成员变量,用于统计总人数
protected:
string name;
int age;
public:
AI_Student(string n, int a) : name(n), age(a) {
total++; // 每次创建对象时,总人数加1
}
virtual ~AI_Student() { // 虚析构函数
total--; // 每次删除对象时,总人数减1
}
static void showTotal() { // 静态成员函数,用于输出总人数
cout << "Total number of students: " << total << endl;
}
};
class AI_Male : private AI_Student {
private:
static int male_num; // 私有继承,只能在类内使用父类的成员变量和函数
public:
AI_Male(string n, int a) : AI_Student(n, a) { // 调用父类构造函数
male_num++; // 每次创建男生对象时,男生数量加1
}
~AI_Male() { // 调用父类析构函数
male_num--; // 每次删除男生对象时,男生数量减1
}
static void showMaleNum() {
cout << "Number of male students: " << male_num << endl;
}
};
class AI_Female : private AI_Student {
private:
static int female_num;
public:
AI_Female(string n, int a) : AI_Student(n, a) {
female_num++;
}
~AI_Female() {
female_num--;
}
static void showFemaleNum() {
cout << "Number of female students: " << female_num << endl;
}
};
int AI_Student::total = 0;
int AI_Male::male_num = 0;
int AI_Female::female_num = 0;
int main() {
AI_Male m1("Tom", 18);
AI_Male::showMaleNum();
AI_Female f1("Lucy", 19);
AI_Female::showFemaleNum();
AI_Male m2("Jack", 20);
AI_Male::showMaleNum();
AI_Female f2("Lily", 18);
AI_Female::showFemaleNum();
AI_Student::showTotal();
return 0;
}
```
解释一下代码:
首先定义了一个 AI_Student 类,其中包含两个私有成员变量(姓名和年龄),一个静态成员变量(用于统计总人数),一个构造函数和一个虚析构函数。虚析构函数是为了在派生类的析构函数中调用。
接着定义了两个派生类:AI_Male 和 AI_Female,它们都私有继承 AI_Student 类。私有继承意味着派生类只能在类内使用父类的成员变量和函数,不能在外部调用。私有继承的好处在于可以隐藏父类实现的细节,提高了代码的安全性。
每个派生类都定义了一个静态成员变量(男生数量或女生数量),并在构造函数和析构函数中分别进行加减操作。这样,每次创建或删除对象时,对应的数量就会增加或减少。
最后在 main 函数中分别创建了两个男生对象和两个女生对象,然后分别调用了对应的静态成员函数输出男生数量、女生数量和总人数。
希望这个例子能够帮助你理解私有继承和静态成员变量的使用。