C++笔记1

来源:互联网 发布:南京鸿鸣网络科技知乎 编辑:程序博客网 时间:2024/06/06 11:43

BasicTutorial6::BasicTutorial6(void):mRoot(0),mPluginsCfg(Ogre::StringUtil::BLANK)

这是构造函数初始化列表

 

C++构造函数的目的是对变量的初始化,不初始化会造成错误。

在C++中,变量定义时,系统会自动调用变量的构造函数对变量进行初始化。只要将相应的初始化代码放在构造函数中,就能够保证该类在实例化对象的时候能够给对象赋以理想的初值。

实际上,程序进入构造函数的大括号体时,就应经完成了变量的定义(也就是分配内存空间)。这就难免会造成这样的情况:在对象呗构造时,程序进入构造函数大括号体之前,首先调用对象的default构造函数,然后进入构造函数体内,重新对变量进行赋值,这降低了程序的效率。

更糟糕的是,如果一个对象必须经由一个非

default构造函数那书进行定义才能够在将来被正常地赋值,而系统默认地调用它的default构造函数,就会出现很大的错误。

||

||

\/

C++的设计者引入了构造函数初始化列表的概念。在构造函数的初始化列表中进行的是对变量的定义与初始化(内存分配空间),而不是简单的赋值。这样就解能够解决上述的效率以及构造函数的选择问题。

 

应为在初始化列表中发生的是成员变量的定义,也就是分配空间,因此初始化列表中构造的顺序与实际编译器定义变量的顺序可能是不一致的,也就是说,编译器不会按照设计者在初始化列表中初始化变量的顺序来为变量分配内存空间。初始化列表中变量的初始化顺序时其在类体内定义的顺序。

同样得,因为const型成员变量只能在被定义的同时被初始化而不能够再次被赋值,它也只能被放在构造函数的初始化列表中。

 

括号赋值只用在定义变量并初始化中。

就是说在没有默认构造函数的时候,如果一个类对象是另一个类的数据成员,那么初始化这个数据成员,就应该放到冒号后面。这样可以带参数。所以在C++中就增加了这种机制,这是面向对象编程所必须的。

原创粉丝点击