#include<iostream.h>
class T
{
public:
T(int c){a=c;b*=c;}
static void display(T C)
{
cout<<C.a<<" "<<b<<endl;
}
private:
int a;
static int b;
};
int T::b=2;
void main()
{
T A(2),B(4);
T::display
(A);
T::display(B);
}//为什么T::display(B)的值是4,16;详细点
static int b; 静态成员变量 这个类的对象全部使用相同的地址空间,一个对象对这个地址空间的数据改变,其他对象的数据也会改变 静态变量不初始化的时候默认值为0 你那里赋值为2了
另外你把 T(int c){a=c;b*=c;} 这句不要写在一行上,否则单步调试的时候不方便
T A(2),B(4); 这里定义2个对象 A(2)的时候 这里你应该可以理解, 这时候b=4
B(4) 的时候 a=c也好理解 , 后面这个b 因为是个静态成员变量,并且前面有对象给他赋值了所以他有值(是4) 于是4*4 16就这么出来了
记住静态成员变量在对象之间是共享的就行了,一个改变其他的也改变
静态变量b初始化成了2(int T::b=2),每构造一个实例b*=2,构造A的时候b*=2=4,构造B的时候b*=4=16
所以分别输出2,16和 4,16,2和4就是你赋给A和B的a的值,静态变量被类的所有实例共享。
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息