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

来源:互联网 发布:金字塔软件 预警 编辑:程序博客网 时间:2024/06/08 00:59

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对象。





0 0