博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类的静态成员
阅读量:2386 次
发布时间:2019-05-10

本文共 1035 字,大约阅读时间需要 3 分钟。

因为类的静态成员变量是所有实例共用的.所以得在类外初始化.
调用的时候可以通过对象调用,也可以通过类直接调用
class A{public:    int i;    //有默认值};class B{public:    static int n;    static A Aobj;};int B::n = 1;    //静态成员变量的初始化A B::Aobj;       //静态成员变量的初始化(实例化)void main(){    B Bobj;    //注释掉这行也能输出B::n    printf("B::n=%d Bobj.n=%d Bobj.Aobj.i=%d\n", B::n, Bobj.n, Bobj.Aobj.i);}
输出“B::n=1 Bobj.n=1 Bobj.Aobj.i=0 ”
 
私有的静态成员变量也是放在类外初始化的.这看起来跟它的私有属性不相符.
再做下面的测试,发现了一个有趣的现象.
class B{    static int i;public:    B(){i=3;};    //把这行注释掉,输出变成2    int p(){return i;};};int B::i = 2;      //把这行注释掉,编译报错void main(){    B Bobj;    printf("private: static int B::i=%d\n", Bobj.p());    //输出3}
类外的初始化那一行是必要的,而且是在构造函数之前就执行了的
于是我的理解是:
静态成员变量的定义一共包括两个部分.
像函数一样,要先在类中声明,然后再找个地方实现.静态成员也要先在类中声明了,再到类外"实现"一下.
这种初始化方式是由静态成员的公有性质决定的,它不能放在构造函数里由每一个对象来初始化,必须在类外实现
总结:
1.要使用类成员名限定访问静态成员,不要使用对象名,因为静态成员变量是类的成员不是对象的成员
2.静态成员可以被继承,基类和派生类对象都可以共享该静态成员,其它特性与一般成员类似
3.类中的任何成员函数都可以访问静态变量,但是静态成员函数不能直接访问非静态成员,只能通过该类的
4.当静态成员声明为私有的时候,之后共有的类成员才能访问该静态成员,并且该私有静态成员也要在类外部进行初始化。
5.对象名访问该对象的非静态成员。这是因为静态成员函数属于整个类的,没有特指向某个对象的this指针

转载地址:http://vxnab.baihongyu.com/

你可能感兴趣的文章
编写不受魔术引号影响的php应用
查看>>
PHP开发安全设置
查看>>
Php Endangers - Remote Code Execution
查看>>
变量的变量,PHP和你
查看>>
PROC系列之四---/proc/loadavg
查看>>
ettercap
查看>>
HOWTO: Service banner faking
查看>>
Debian 'login' Local Privilege Escalation Vulnerability
查看>>
Netrw Vim Script Multiple Command Execution Vulnerabilities
查看>>
PHPmyGallery Local and Remote File Include Vulnerabilities
查看>>
apache .htaccess 的应用
查看>>
Apache服务器中限制针对某一目录的CGI解析
查看>>
LFI to RCE Exploit with Perl Script
查看>>
变态服务器安全设置
查看>>
Local Root BruteForcer
查看>>
正则表达式特殊含义字符
查看>>
教你轻松查看QQ空间加密后的好友图片
查看>>
Socks5代理服务器配置
查看>>
iis+fastcgi
查看>>
windows 2003防Ddos
查看>>