void f(){
static int num_calls=0;
...
num_calls++;
}
class X{
X(int,int);
~X();
};
void f(){
static X my_X(10,20);//变量只做一次初始化
}
类里不能对静态成员做初始化,只能对非静态成员做初始化。
class A{
public:
//A():i(0){ } 这句会报错,不能对静态成员做初始化
A(){ i=0; }
void print(){ cout<<i<<endl; }
//void set(int ii){i=ii;}
void set(int i){this->i=i;}正确
static void say(int ii){ cout<<ii<<this->i<<endl;}
//static void say(int ii){ cout<<ii<<k<<endl;}错误,静态函数只能调用静态成员变量,而k是非静态的
private:
int k;
static int i;//声明
};
int A::i=20;//定义,但是由于类里存在i=0 实际上本句的20不会被初始化
//static int A::i=20;报错,因为这样写表示只有本页可以使用i,但实际上,其他地方页可以使用
int main(){
A a,b;
a.set(10);
b.print();
a.say(0);
A::say(0);//调用静态成员函数
return 0;
}
class A{
public:
//A():i(0){ } 这句会报错,不能对静态成员做初始化
A(){ i=0; }
void print(){ cout<<i<<endl; }
void set(int i){this->i=i;}正确
static int i;//声明
};
int A::i=20;//定义,但是由于类里存在i=0 实际上本句的20不会被初始化
int main(){
A a,b;
a.set(10);
b.print();
cout<<a.i<<endl;
cout<<A::i<<endl;//直接访问静态成员(变量)
return 0;
}