13.C++-静态成员变量、静态成员函数
2018-06-17 20:59:45来源:未知 阅读 ()
首先回顾下成员变量
能通过对象名能够访问public成员变量
每个对象的成员变量都是专属的
成员变量不能在对象之间共享
再来讲讲类的静态成员变量
介绍
- 静态成员变量属于整个类所有
- 静态成员变量的生命期不依赖于任何对象(如同全局变量)
- 可以通过类名直接访问公有(public)静态成员变量
- 所有对象共享类的静态成员变量
- 可以通过对象名访问公有(public)静态成员变量
特性
- 在类里定义时直接通过static关键字修饰
- 静态成员变量需要在类外单独分配空间
- 静态成员变量在程序内部位于全局数据区
例如:
class Test{ public: static int cnt; //static修饰,告诉编译器在Test类里有个静态成员变量cnt }; int Test::cnt = 1; //在类外初始化,若不赋值则默认置0 int main() { Test::cnt = 100; //设置公有静态成员变量cnt=100 printf("cnt:%d\n",Test::cnt); return 0; }
如果static成员时const类型,则可以直接在类内部初始化赋值
例如:
class Test{ public: const static int cnt = 0; //类内部初始化 }; int main() { printf("cnt:%d\n",Test::cnt); return 0; }
接下来做一个小实例
在程序运行时, 可以随时查询到某个类的对象的个数
保证程序的安全,不能使用全局变量
代码如下:
#include "stdio.h" class Test{ private: static int cnt; public: Test() { cnt++; } ~Test() { cnt--; } int getCNT() { return cnt; } }; int Test::cnt = 0; //在类外赋值,使其分配空间 int main() { Test t1; Test t2; Test *t3; printf("count:%d\n",t1.getCNT()); printf("count:%d\n",t2.getCNT()); t3= new Test; printf("count:%d\n",t1.getCNT()); delete t3; printf("count:%d\n",t1.getCNT()); return 0; }
运行打印:
count:2 count:2 count:3 count:2
运行后,可以发现已经能够统计对象个数了.
但是还有缺点,调用这个getCNT()函数时,前提还要有个对象才行.
假如程序里没有对象了,就根本无法查询到count值.
所以我们还需要使用类的静态成员函数来完善它
静态成员函数
介绍
- 静态成员函数属于整个类所有
- 静态成员函数没有隐含this指针,无法直接访问非静态成员变量
- 可以通过类名或对象名来访问公有静态成员函数
静态成员函数定义和成员函数类似,唯一区别是,在类里定义时需要在前面加static关键字
例如:
class Test{ public: static int func() { //定义func静态成员函数 //... ... return 0; } }
或者:
class Test{ public: static int func(); //定义func静态成员函数 } int Test::func() { //... ... return 0; }
接下来完善上面实例,使用静态成员函数获取统计个数
#include "stdio.h" class Test{ private: static int cnt; public: Test() { cnt++; } ~Test() { cnt--; } static int getCNT() { return cnt; } }; int Test::cnt = 0; //在类外赋值,使其分配空间 int main() { printf("count:%d\n",Test::getCNT()); Test t1; Test t2; Test *t3; printf("count:%d\n",Test::getCNT()); t3= new Test; printf("count:%d\n",Test::getCNT()); delete t3; printf("count:%d\n",Test::getCNT()); return 0; }
运行打印:
count:0 count:2 count:3 count:2
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C++ const成员函数 2020-06-03
- C++ 静态持续变量 2020-05-10
- 成员指针与mem_fn 2020-04-23
- 公有继承中派生类Student对基类Person成员的访问 代码参考 2020-04-20
- C++ 静态成员----细谈static修饰的成员 2020-03-19
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash