千家信息网

怎么理解C++的静态成员变量和静态成员函数

发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,怎么理解C++的静态成员变量和静态成员函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。一.static修饰变量void text()
千家信息网最后更新 2025年01月24日怎么理解C++的静态成员变量和静态成员函数

怎么理解C++的静态成员变量和静态成员函数,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一.static修饰变量

void text() {        static int a = 10;        a++;        cout <<"a=" << a << endl;}int main(int arg, char** args) {        text();        text();}

结果:

二.static修饰函数

此函数的作用域只在本文件,其他文件无法调用。

static void text() {        int a = 10;        a++;        cout <<"a=" << a << endl;}

三.static在类中使用

1.static成员变量实现了同类对象间信息共享。

2.static成员类外存储,球类大小,并不包含在内。

3.static成员是命名空间属于类的全局变量,存储在data区(静态区)。

4.static成员只能在类外初始化。

5.可以通过类名访问(无对象生成时亦可),也可以通过对象访问。

1.创建与初始化

先看错误:对于静态变量的构造函数的错误。

class AA {public:        AA(int a, int b,int c,int d) {//错误的构造函数                m_a = a;                m_b = b;                m_c = c;                m_d = d;        }        static int m_c;private:        int m_a;        int m_b;        static int m_d;};

正确写法:静态成员变量初始化,一定在类外。

class AA {public:static int m_c;        AA(int a, int b) {                m_a = a;                m_b = b;        }               ~AA() {                cout << "m_a=" << m_a << "       m_b=" << m_b << "     m_c=" << m_c << "     m_d=" << m_d << endl;        }private:        int m_a;        int m_b;        static int m_d;};int AA::m_c = 0;//public下静态变量初始化int AA::m_d = 1;//private下静态变量初始化int main(int arg, char** args) {        AA a1(1, 2);}

结果:


2.使用问题

例子1:

class AA {public:        AA(int a, int b) {                m_a = a;                m_b = b;        }        static int m_c;        int get_c() {                m_c++;                return m_c;        }private:        int m_a;        int m_b;};int AA::m_c = 0;int main(int arg, char** args) {        AA a1(1, 2);        AA a2(10, 20);        cout <<"a1(1, 2)下的c:" << a1.get_c() << endl;        cout << "a2(10, 20)下的c:" << a2.get_c() << endl;}

结果:


原因:因为static分配变量在静态区,因此类AA下所有变量(a1、a2)共用一个m_c。

因此,类中public下的static变量可以使用下面。访问。但是private不可用。

cout<

3.在public、private下static变量使用

在public下:可以通过AA::m_c = 100直接访问和修改static变量值。

class AA {public:        AA(int a, int b) {                m_a = a;                m_b = b;        }        static int m_c;private:        int m_a;        int m_b;};int AA::m_c = 0;int main(int arg, char** args) {        AA::m_c = 100;        cout << AA::m_c << endl; }

在private下:必须提供函数,才能访问和修改static变量值。

class AA {public:        AA(int a, int b) {                m_a = a;                m_b = b;        }        static void set_md(int d) {                m_d = d;        }        static int get_md() {                return m_d;        }private:        int m_a;        int m_b;        static int m_d;};int AA::m_d = 1;int main(int arg, char** args) {        AA::set_md(100);        cout << AA::get_md() << endl;   }

结果:

四.class含有static变量所占空间

class A {private:        int a;        int b;        static int c;};int main() {        cout << sizeof(A) << endl;}

结果:


结果:居然是8,不是12。因为static成员是命名空间属于类的全局变量,存储在data区(静态区)。

五.练习题:求学生总人数、总分、平均分系统。

#include using namespace std;class Student {private:        int m_id;        double m_score;        static int count;        static double total_score;public:        Student(int id,double score) {                m_id = id;                m_score = score;                count++;                total_score += m_score;        }        static double get_total_score() {                return total_score;        }        static double get_count() {                return count;        }};int Student::count = 0;double Student::total_score = 0.0;int main(int arg, char** args) {        Student S1(1, 50.1), S2(2, 10.1), S3(3, 0.1);        //double mean_score = 0.0;        cout << "学生人数:" << Student::get_count() << endl;        cout << "学生总分:" << Student::get_total_score() << endl;        cout << "学生平均分" << Student::get_total_score() / Student::get_count() << endl;}

看完上述内容,你们掌握怎么理解C++的静态成员变量和静态成员函数的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

变量 静态 成员 函数 结果 学生 可以通过 对象 空间 错误 问题 C++ 人数 全局 内容 原因 平均分 总分 文件 方法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络数据库技术是做什么的 上海管理软件开发公司 电子书 服务器 sql查询数据库名和表名 祁阳区本色世界网络技术推广 2020全国网络安全员比赛 数据库中加引号和不加引号的区别 网络技术培训网站 计算机软件开发与应用研究 文件dsn数据库MySQL 天津网络时间服务器标准服务器 威客任务网软件开发 软件开发3D图示 数据库的存储过程怎么写 重庆双桥区苹果软件开发机构 广州引力科技网络技术有限公司 徐州网络营销软件开发费用是多少 广州服务器托管价格 国内计算机网络安全事件 陇南小程序软件开发公司 公众号商城服务器需要多大 医院网络安全会议讲话 手机网易版海贼王服务器 方舟进化服务器下不去怎么办 云服务器安全组什么用 网络安全硕士适合考的公务员岗位 吉林有名的网络技术咨询口碑推荐 深圳潮流网络技术有限公司简介 vb 几种数据库 模块 涪陵区工商软件开发服务公司
0