class Tc
{
int i;
static int k;
public:
Tc()
{
i = 0;
i ++;
k ++;
}
void display()
{
cout<<"i = "<<i<<", k = "<<k<<endl;
}
};
int Tc::k = 0;
int main()
{
Tc A, B;
A.display();
B.display();
}
输出结果:
i = 1, k = 2
i = 1, k = 2
若改为:
Tc::Tc()
{
i = 0;
i ++;
Tc::k++;//这个地方的Tc::可以省略
}
4.类的静态成员函数
(1)类的静态成员函数属于类而不是属于对象。
(2)类的静态成员函数视线中不可直接使用非静态成员,但是可以直接使用静态成员。
(3)若在静态成员函数中引用非静态成员,必须加对象名(静态成员函数接收参数然后通过参数来调用)。
5.补充
Test t1(t2); //调用拷贝构造函数
Test t1(5); //调用构造函数
6.找出以下代码片段中的错误并分析原因。
class myclass
{
public:
static void fun();
private:
static int global;
};
void myclass::fun()
{
global = 100;
}
分析:错误出在将类的静态成员放在函数中初始化,正确的初始化方法是放在类外且在函数外完成。
class myclass
{
public:
static void fun(myclass my);
private:
int global;
};
void myclass::fun()
{
cout<<global;
}
分析:错误出在两个地方,第一个地方,函数的定义和使用上出现了参数上的不一致;第二个地方类的静态成员函数可以引用静态数据成员,但对于非静态数据成员的引用必须通过对象来完成。
补充:
(1)全局变量中不出现static修饰,static要么出现在类内要么出现在函数内。
(2)引用对象时,类的对象必须先完成初始化。