在学习C++的过程中接触到了初始化列表这个概念。之前我还以为为构造函数中对各个变量的赋值是进行初始化呢,这个想法真是弱爆了,看到了初始化列表的描述和解释才知道原来真正的初始化和赋值的区别。不想过多把这个展开,随便引用一部分介绍。这个介绍写的挺好的。

转自:http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html


在看的过程中我又了解到,初始化列表中不仅仅能够初始化基本类型的变量,像int,double,float等,还能初始化类类型和结构体。类类型我也可以理解,有构造函数,调用构造函数就行了,但是我没理解的是结构体怎么在初始化列表中使用,直接struct aa(x,y,z)这样么?试了一下,这样不行。查了一下,了解到实际上结构体和类很相似,可以有成员,也可以有函数、构造函数。之所以不能像刚才那样在初始化列表中是因为结构体默认是没有参数的构造函数,所以不能行。在struct中定义了一个新的构造函数,再在初始化列表中进行对结构体的初始化就没有问题了。(顺便说一下,结构体的变量默认是public的,类的默认是private的,这个是一个区别)


简单的代码(是一个window控制台程序)、

#include "stdafx.h"
typedef struct tagMyStruct
{
int old;
float height;
tagMyStruct(int a,float b)
{
this->old = a;
this->height = b;
}
}MyStruct;
class MyTestClass
{
private:
MyStruct myStruct;
int testNum;
public:
MyTestClass():
  testNum(0),
  myStruct(19,8.8)
  {
  }
int GetTestNum()
{
return this->testNum;
}
int GetOld()
{
return this->myStruct.old;
}
float GetHeight()
{
return this->myStruct.height;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MyTestClass myClass;
printf("This is my class.testNum:%d,struct.old:%d,struct.height:%2f\r\n",
myClass.GetTestNum(),myClass.GetOld(),myClass.GetHeight());
return 0;
}