1.3 构造函数

来源:互联网 发布:周灏 数据财经新浪网 编辑:程序博客网 时间:2024/06/05 18:34

·inline函数

    函数若在class内定义完成,便自动成为inline函数候选人。

    函数前面用关键字 声明该函数为inline函数时,是告诉编译器尽量把它编译为inline函数,是否成为inline函数由编译器决定。


·access level(访问级别):

   public、private(默认访问权限)、protected。

   struct的默认访问权限是public.


·constructor( ctor, 构造函数)

  下面是complex类中的构造函数complex

   complex (double r = 0, double i = 0)

   : re (r), im (i)

  {}

   解析:(double r = 0, double i = 0)为default argument(默认实参)

    re (r), im (i) 为initialization list(初始化列表,初值列)

     

 对成员变量赋值还可以使用赋值语句,如:

   complex (double r = 0, double i = 0) { re = r; im = i;}  //assignments(直接赋值)

  NOTE: 通过初始化列表,在对象初始化时,对成员变量赋值一次。

          C++规定,对象的成员变量初始化动作发生在进入构造函数本体之前,更好的做法是使用成员初值列替换赋值动作。

     初始化列表可以不必调用默认构造函数来进行初始化,而是直接调用拷贝构造函数类初始化。

  初始化方法:

       初始化列表的初始化方法:调用拷贝构造函数。

       直接赋值的初始化方法:对成员变量赋值两步,先调用默认构造函数赋值, 再调用构造函数赋值

       综上,初始化列表的初始化方法效率更高。


·构造函数可以有很多个——overloading(重载)

    下图中有构造函数和real函数的重载,注意图片中右下角的real函数编译后的实际名称说明:

   

上图中的real函数重载可以同时存在,但是上图中的两个COMPLEX构造函数有冲突不可以同时存在,原因是因为complex的 1 构造函数中的参数有默认值0,所以对于使用complex创建对象的语句 complex c1();  和complex c2; 上图中的构造函数1和构造函数2均可,编译器不知道该选择哪一个,所以图片中不允许同时存在complex的两个构造函数。


·constructor 构造函数被放在private区

   

构造函数放在private区,不可以创建对象,那么它的用途呢?

    设计模式:Singleton

   class A {

   public:

       static A& getInstance();

       setup() {...}

   private:

      A();

      A(const A& rhs);

      ...

     }


   A& A::getInstance()

  {

     static A a;

     return a;

  }

通过 A::getInstance().setup();创建对象。

  

0 0
原创粉丝点击