静态成员(变量、函数)

一直在用static,现总结一下,注意事项

在一个类中定义静态成员变量 和 静态成员函数


<pre name="code" class="cpp">class example{
privat:
    INT a;
    static WORD b;
public:
    static void func(WORD x){b = x;}
    void func1(INT y){a = y;}
};


 static成员变量不属于对象的一部分,而是属于类,所以程序在还没有诞生该类对象时就开始处理static成员变量,因此,在定义该类对象前,必须先初始化该static成员变量。 

如上例, 在应用程序cpp文件中必须先初始化 b,(一般不会在类、头文件中初始化,原因是初始化仅需一次就行,你在类中或头文件中初始化,可能被初始多次)。

初始化:

WORD exmple::b = 0;               //初始化静态成员变量b
void main(){........}
严格意义上讲,上面对b的操作是初始值设定操作,并不是赋值操作,所以尽管b是私有变量(私有变量赋值一般要用公共函数操作,如func1函数,当然,如果定义成公有变量就没必要用func1这样的函数了),也是可以这么做,

事实上,static实在设定初始值时才被真正意义上的定义出来的(不是在类中声明)。如果没有初始化静态成员变量,就会报链接错误的,错误大致是:

error LINK2001: unresolved external symbol ...................................................

虽然static不依赖于对象才得以实现,但它可以通过对象来调用如:

example Ex1;
example::func(10);
Ex1.func(10);

上面的两种赋值都是可以的。其中func(),就是静态成员函数,所以它是可以不用借助任何对象就可以实现,由于编译器不会暗自添加一个this指针给静态成员函数,所以,静态成员函数只能处理类中的static成员,对与非static成员无法调用。但非静态成员函数可以调用静态成员变量。


注:类中的非静态成员函数,编译器在执行时,会暗自分配一个this指针,指向该对象。

如:

example Ex2;
Ex2.func1(10);
其实编译器所认为的是这样的:

example::func1(10,(example*)&Ex2);




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值