本文共 1972 字,大约阅读时间需要 6 分钟。
类的数据成员有两种一是存在在类类型的每个对象中的葡萄成员,还有一个是独立于类的任意对象存在,属于类的,不与类对象关联,这种称为static成员。
对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量
比如统计某种类型对象已创建的数量, 需要一个变量,被该类型的全部对象共享,创建了一个共享,创建了一个就加1,销毁就减1,则需要一个对象被该类型的全体对象共享。
如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量。
- # ifndef _COUNTOBJECT_H_
- # define _COUNTOBJECT_H_
-
- class CountObject
- {
- public:
- CountObject(void);
-
- ~CountObject(void);
-
- static int count_;
- };
- # endif
- # include "CountObject.h"
- # include <iostream>
-
- int CountObject::count_ = 0;
-
- CountObject::CountObject()
- {
- ++count_;
- }
- CountObject::~CountObject()
- {
- --count_;
- }
- # include "CountObject.h"
- # include <iostream>
- using namespace std;
-
- int main(void)
- {
-
- cout << CountObject::count_<<endl;
-
- CountObject col;
-
- cout << CountObject::count_<<endl;
-
- return 0;
- }
3.静态成员函数不可以访问非静态成员(因为没有this指针,指向某个对象,所以无法访问非静态成员)
- # ifndef _TEST_H_
- # define _TEST_H_
-
- class Test
- {
- public:
- Test(int y_);
- ~Test();
- void TestFun();
- static void TestStaticFun();
-
- public:
- static const int x_ ;
- int y_;
- };
-
- # endif //_TEST_H_
- #include "Test.h"
- # include <iostream>
- using namespace std;
-
- Test::Test(int y):y_(y)
- {
-
- }
-
- Test::~Test(void)
- {
-
- }
- void Test::TestFun()
- {
- cout<<"x = " << x_<<endl;
- cout<<"This is not a static fun but it can call StaticFun()..." <<endl;
- }
- void Test::TestStaticFun()
- {
-
-
-
-
-
- }
-
- const int Test::x_ = 100;
- # include "Test.h"
- # include <iostream>
- using namespace std;
-
- int main(void)
- {
- cout << Test::x_ <<endl;
- Test t(10);
-
- t.TestFun();
- cout << t.y_ << endl; //cout << t::x_<<endl; static 不能被对象调用,只能由类调用
-
-
- cout <<Test::x_ << endl;
-
- return 0;
- }
转载地址:http://vznao.baihongyu.com/