您的位置:首页 > 编程语言 > C语言/C++

C++注意事项——1、确保每个对象在使用前已被初始化

2014-10-17 15:19 525 查看
C是”接近机器的“,通过一系列函数完成过程的实现。

C++是接近问题的,通过一些了的类实现面向问题的解决方案。其关键思想是多态性。

C++对C语言的扩张最为重要的两个概念是面向对象和泛型编程。

注意事项:

1、确保每个对象在使用前已被初始化

      CPerson::CPerson(int  age ,string   name)

     {

         m_age=age;

        m_name=name;

     }

   这个只是赋值,而不是初始化,因为C++规定对象中成员变量的初始化发生在对象的构造函数之前。

 一个较佳的写法是使用成员初始化列表替换赋值动作。

      CPerson::CPerson(int  age ,string   name)

        :m_age(age),m_name(name)

     {

     }

这个与上一个构造函数最终的结果是一样的,但是效率更高。

使用赋值初始化对象变量时,即第一个构造函数,会在构造函数执行前,调用默认构造函数初始化初始化m_age、m_name。

然后再立刻执行赋值操作。而通过初始化列表,避免了该操作。

有些情况下,即使赋值和初始化列表两者效率一样,也得使用初始化列表。

如果成员变量是const 或reference,他们就一定要初始化,而不能被赋值。

C++有固定的初始化顺序:

基类先于子类初始化;

类中的变量总是以变量声明的顺序进行初始化,和成员初始化列表无关,所以在成员初始化列表中初始化各变量时,最好以声明的次序为顺序。

non-local static对象初始化问题:为了避免在对象初始化之前过早地使用它们,

需要:手动初始化内置类型的对象;或者使用成员初始化列表初始化对象的所有成分。

 C++中的static对象是指存储区不属于stack和heap、"寿命"从被构造出来直至程序结束为止的对象。这些对象包括全局对象,定义于namespace作用域的对象,在class、function以及file作用域中被声明为static的对象。其中,函数内的static对象称为local static
对象,而其它static对象称为non-local static对象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: