和静态数据成员一样,静态成员函数是所有对象共享的,不是单独属于某一个对象,由于静态成员函数没有传递this指针,故static member function 只能访问static成员,不能访问非static 成员。但是非static却可以访问static 成员。
1 #include<iostream> 2 using namespace std; 3 class X{ 4 int i; 5 static int j; 6 public: 7 X(int ii=0) :i(ii){ 8 j = i;//non-static member function can access static member function or data 9 } 10 int val()const{ return i; } 11 static int incr(){ 12 //i++; Error:static member function can not access non-static member data 13 return ++j; 14 } 15 static int f(){ 16 //!val() Error:static member function can not access non-static member function 17 return incr(); 18 } 19 20 }; 21 int X::j = 0; 22 int main(){ 23 X x; 24 X* xp = &x; 25 x.f(); 26 xp->f(); 27 X::f(); 28 system("pause"); 29 return 0; 30 31 }
对象在访问静态成员时,可以通过点运算符和箭头运算符。这样就把静态成员函数与某一个对象相连接了,也可以直接用 className::static member fucntion name 的方式访问。
有时可以把构造函数设置成私有的,如下面的例子
1 class Egg{ 2 static Egg e; 3 int i; 4 Egg(int ii) :i(ii){} 5 Egg(const Egg&);//prevent copy-construction 6 public: 7 static Egg* instance(){ return &e; } 8 int val()const{ return i; } 9 }; 10 11 Egg Egg::e(47); 12 int main(){ 13 //! Egg x(0); Error can‘t create an Egg 14 cout << Egg::instance()->val() << endl; 15 system("pause"); 16 return 0; 17 18 }
为了不让类可以拷贝创建对象,增加了一个私有的拷贝构造函数
Egg(const Egg&);//prevent copy-construction这样类就不可以如下的创建对象了Egg e=*Egg::instance();
时间: 2024-10-25 21:04:44