使用静态成员变量的好处
时间: 2023-07-20 20:04:56 浏览: 100
使用静态成员变量的好处主要有以下几点:
1. 全局性:静态成员变量是属于类的,而不是属于类的某个对象。因此,它可以被所有类的对象共享,具有全局性。
2. 生命周期长:静态成员变量在程序运行期间只会被创建一次,它的生命周期长,可以一直存在于内存中,直到程序结束。
3. 方便访问:由于静态成员变量是属于类的,因此可以通过类名直接访问,不需要先创建类的对象。
4. 数据共享:静态成员变量可以用于实现数据共享,多个对象可以共享同一个静态成员变量,达到节省内存空间的目的。
5. 保护数据:静态成员变量可以被用于保护数据,将数据设为私有的静态成员变量,只能通过类的公共接口来访问,从而保护数据的安全性。
相关问题
extern使用静态局部变量
使用关键字可以在一个文件中引用另一个文件中声明的静态局部变量。静态局部变量的作用域仅限于声明它的函数内部,无法直接从其他文件中访问。但是,如果在另一个文件中使用extern关键字声明同样名称的变量,就可以访问到原先声明的静态局部变量的值。这样做的好处是可以在不改变变量作用域的前提下,实现跨文件共享变量的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [关键字static、extern+全局变量与局部变量详解](https://blog.csdn.net/qq_51050614/article/details/124068531)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *2* [C++中静态成员函数与静态成员变量(static )](https://download.csdn.net/download/weixin_38591011/14868586)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
定义一个人工智能学院大一学生类,派生出男生和女生类,利用私有继承输出男生数量和女生数量数,其中可以结合构造函数和析构函数完成,要求在类内定义一个静态成员变量来统计学生总人数。
好的,下面是代码实现:
```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 函数中分别创建了两个男生对象和两个女生对象,然后分别调用了对应的静态成员函数输出男生数量、女生数量和总人数。
希望这个例子能够帮助你理解私有继承和静态成员变量的使用。
阅读全文