永发信息网

师傅帮我看到题C++

答案:2  悬赏:10  手机版
解决时间 2021-04-26 05:58
  • 提问者网友:了了无期
  • 2021-04-25 16:39

#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;详细点

最佳答案
  • 五星知识达人网友:佘樂
  • 2021-04-25 17:52

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就这么出来了



记住静态成员变量在对象之间是共享的就行了,一个改变其他的也改变

全部回答
  • 1楼网友:旧脸谱
  • 2021-04-25 18:56
静态变量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的值,静态变量被类的所有实例共享。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯