类与对象:静态成员

简介: 类与对象:静态成员

静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员

静态成员分为:

静态成员变量

  • 所有对象共享一份数据
  • 在编译阶段分配内存
  • 类内声明,内外初始化


静态成员函数

静态成员变量演示:

class Person
{
public:
    static int m_A;
};
int Person::m_A = 100;//内外进行声明
void test01()
{
    Person p;
    cout << p.m_A << endl;
    Person p2;
    p2.m_A = 200;
    cout << p2.m_A << endl;
    cout << p.m_A << endl;
}
int main()
{
    test01();
    return 0;
}

这段代码输出的结果是:

为什么前后两个p.m_A输出的结果会不一样呢?因为在Person类中创建的是一个静态变量,所有成员都共享一份数据,当执行p2.m_A = 200;时,p.m_A的值也会发生改变。


静态成员变量可以通过对象进行访问,也可以通过类名进行访问(非静态成员变量不行):

class Person
{
public:
    static int m_A;
};
int Person::m_A = 100;
void test02()
{
    Person p;
    cout << p.m_A << endl;          //1.通过对象进行访问
    cout << Person::m_A << endl;    //2.通过类名进行访问问 
}
int main()
{
    test02();
    return 0;
}

两种方式访问的输出结果:

静态成员函数和静态成员变量类似,可以通过对象进行访问,也可以通过类名进行访问

静态成员函数演示:

class Person
{
public:
    static void func()
    {
        cout << "static void func调用" << endl;
    }
};
void test01()
{
    //1.通过对象进行访问
    Person p;
    p.func();
    //2.通过类名进行访问
    Person::func();
}
int main()
{
    test01();
    return 0;
}

静态成员函数只能访问静态成员变量:

class Person
{
public:
    static void func()
    {
        m_A = 100;             //静态成员函数 能访问静态成员变量
        //m_B = 200;             //静态成员函数 不可已访问 非静态成员变量
        cout << "static void func调用" << endl;
    }
    static int m_A;
    int m_B;
};
int Person::m_A = 0;

原因:静态成员变量是所有对象共享的,如果让静态成员函数访问非静态成员变量m_B时,无法区分m_B是属于哪个对象的

注意:静态成员变量和静态成员函数和普通变量一样,都有访问权限。

目录
相关文章
|
网络协议 安全 前端开发
网络技术基础(2)——网络参考模型
【2月更文挑战第6天】网络基础笔记
|
弹性计算
新手必看,阿里云国际购买服务器带宽如何选择
新手必看,阿里云国际购买服务器带宽如何选择
|
前端开发 JavaScript API
技术笔记:vue+pdfh5实现将pdf渲染到页面上
技术笔记:vue+pdfh5实现将pdf渲染到页面上
|
11月前
|
数据可视化 搜索推荐 数据挖掘
广告公司团队协作的最佳软件是哪些?求答!
本文介绍了六款适合广告团队协作的办公软件,包括国内的板栗看板和国外的Trello、Asana、Basecamp、Jira及Monday.com。这些软件均具备可视化管理、灵活任务分配、实时协作等核心功能,能有效提升团队效率和项目管理水平,满足不同规模广告团队的需求。
184 1
|
存储 JavaScript 前端开发
vue尚品汇商城项目-day05【30.登录与注册静态组件(处理公共图片资源问题)+31.注册的业务+登录业务】
vue尚品汇商城项目-day05【30.登录与注册静态组件(处理公共图片资源问题)+31.注册的业务+登录业务】
117 1
|
前端开发 JavaScript API
|
存储 算法
【PTA刷题】求链式线性表的倒数第K项(代码+详解)
【PTA刷题】求链式线性表的倒数第K项(代码+详解)
429 0
|
SQL 存储 关系型数据库
认真学习MySQL中的二进制日志(binlog)与中继日志(Relay log)
认真学习MySQL中的二进制日志(binlog)与中继日志(Relay log)
482 0
|
机器学习/深度学习 人工智能 达摩院
MindOpt——优化虚拟电厂智能调度问题(二)
智慧楼宇调度,是在保证社区负荷需求的情况下,通过储能设备的指令控制,以用电经济性、环保性和对电网稳定性为综合目标的一种调度场景。
MindOpt——优化虚拟电厂智能调度问题(二)
|
关系型数据库 分布式数据库 数据库
活动预告 | 1月6日"国产数据库共话未来趋势"线下沙龙 上海站欢迎您的到来!
1月6日周六,PolarDB开源社区联合PostgreSQL中文社区、拓数派共同举办以“国产数据库共话未来趋势”为主题的技术沙龙,本次沙龙我们邀请了众多国产数据库领域的专家,深入探讨和交流,共同揭秘“数据库实践哪家强”。
活动预告 | 1月6日"国产数据库共话未来趋势"线下沙龙 上海站欢迎您的到来!