注册 登录
编程论坛 C++教室

为何答案是14?求问大神!

蛤蟆001 发布于 2016-09-17 00:24, 2249 次点击
#include<iostream.h>
class TestClass
{ public:
  TestClass (){val++;}
  static int val;
};
int TestClass::val=0;
void main()
{ TestClass cs1;
  cout<<cs1.val<<"";
  TestClass cs2;
  TestClass cs3,cs4;
  cout<<cs2.val<<endl;
6 回复
#2
rjsp2016-09-17 11:14
不是1和4的话,你认为是几呢?
#3
反脑控20162016-09-18 22:00
答案是14没错
对象空间内,不包含静态数据成员空间,静态数据成员所占空间不会随着对象的产生而分配,或随着对象的消失而回收。
对于包含静态数据成员的类来说,不管是建立还是不建立此类的对象,还是建立很多这个类的对象,这个类的静态数据成员是唯一存在的,这个类的所有对象共享这个静态数据成员。
#4
鸿蒙之灵2016-09-18 22:56
程序代码:
#include<iostream.h>
class TestClass
{ public:
  TestClass (){val++;}   //构造函数
  static int val;      //静态成员变量,此处没有赋值,也就没有初始化
};
int TestClass::val=0;
void main()
{ TestClass cs1;     //构造函数第一次调用,val的值自增为1
  cout<<cs1.val<<"";
  TestClass cs2;     //构造函数第二次调用,val的值由前面的1自增为2
  TestClass cs3,cs4;   //第三次调用,val=3,   cs4对象的创建使构造函数进行了第四次调用,val=4
  cout<<cs2.val<<endl;   //因为val为TestClass类的静态成员变量,所以,在这里无论输出cs1.val ,还是输出cs3.val 结果都是4

以上是运行的过程注释,具体原因楼上说的很清楚,我不知道你看懂了没有
#5
落魄小书生2016-09-19 20:24
楼主打断点跟踪一下自己就明白了
#6
蛤蟆0012016-09-21 11:24
回复 4楼 鸿蒙之灵
谢谢谢谢谢谢~
#7
StadyC2016-10-14 10:49
一次定义调用一次构造函数,你说呢
1