面向对象的static关键字

1.静态数据成员

include <iostream>

class Myclass

{

public:

         Myclass(int a,int b,int c);

         void GetSum();

private:

         int a,b,c;

         static int Sum;//声明静态数据成员

};

int Myclass::Sum=0;//定义并初始化静态数据成员


Myclass::Myclass(int a,int b,int c)

{

         this->a=a;

         this->b=b;

         this->c=c;

         Sum+=a+b+c;

}

void Myclass::GetSum()

{

         std::cout<<"Sum="<<Sum<<std::endl;

}



int main()

{

         Myclass M(1,2,3);

         M.GetSum();

         Myclass N(4,5,6);

         N.GetSum();

         M.GetSum();
return 0;


}

输出为:Sum=6
Sum=21
Sum=21


静态数据成员被当作是类的成员。无论这个类的对象被定义了多少个,静态数据成员在程序中也只有一份拷贝,由该类型的所有对象共享访问。也就是说,静态数据成员是该类的所有对象所共有的。对该类的多个对象来说,静态数据成员只分配一次内存,供所有对象共用。

Static成员变量的初始话是在类外,此时不能再带上static的关键字。

类的静态数据成员有两种访问形式:
<类对象名>.<静态数据成员名> 或 <类类型名>::<静态数据成员名>

静态数据成员主要用在各个对象都有相同的某项属性的时候。

2 静态成员函数

出现在类体外的函数定义,不能指定关键字static;

静态成员之间可以相互访问,包括静态成员函数访问静态数据成员和访问静态成员函数;

静态成员函数不能访问非静态成员函数和非静态数据成员;

调用静态成员函数,可以用成员访问操作符(.)和(->)为一个类的对象或指向类对象的指针调用静态成员函数,也可以直接使用如下格式:
<类名>::<静态成员函数名>

 

 

posted @ 2012-06-21 01:16  propheteia  阅读(784)  评论(0编辑  收藏  举报