zoukankan      html  css  js  c++  java
  • 构造函数初始化列表

    一、什么是构造函数初始化列表

    构造函数初始化列表,是在构造函数的基础上,后面以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如:

      class A
      {
      public:
          int a;
          int b;
          //一般的构造函数
          A(int x, int y)
          {
              a = x;
              b = y;
          }
      };
    class A
      {
      public:
          int a;
          int b;
          //构造函数初始化列表
          A(int x, int y):a(x),b(y)
          {/*空函数体*/}
      };

    一般的构造函数和构造函数初始化列表有什么区别?

    1、这两个构造函数实现的效果是一样的,都可以实现类内成员变量的初始化

    2、构造函数初始化列表的使用面更广,有些类型数据(const、引用)的初始化操作使用一般的构造函数初始化不了。

    注意:static静态局部变量的初始化不能在参数列表中进行,只能在构造函数内进行

    下面会重点举这方面的例子

    1、类内没有默认构造函数的成员类对象;(构造函数不带参数,即如果类里面的类对象需要初始化,一般的构造函数初始化不了

     

     正确的做法是使用构造函数参数列表,列表里面对类对象进行初始化赋值

    2、类内const成员或引用类型的成员。(const全局静态变量只能在初始化的时候赋值,其它时候赋值不了)

    错误的方法

    正确使用方法

    还有重要的一点是,使用构造函数初始化列表比一般的构造函数效率高,初始化列表会把初始化和赋值放在一起进行,只需要拷贝构造一次,而一般的构造函数需要拷贝构造两次

    使用构造函数初始化列表

    使用一般构造函数

    二、构造函数初始化列表 的顺序问题

     最后在总结一下

    1、一般的构造函数不能初始化自带构造函数的类对象

    2、一般的构造函数不能初始化const变量和引用变量

    3、static变量不能使用列表参数去初始化

    4、使用列表参数初始化类内成员变量的效率会更高

    5、使用列表参数的时候,声明类内变量的前后顺序很重要,在进行初始化的时候,要避免用一个未初始化的参数去初始化另一个参数

     

  • 相关阅读:
    ExecuteScalar requires the command to have a transaction when the connection assigned to the command is in a pending
    如何从vss中分离程序
    String or binary data would be truncated
    the pop3 service failed to retrieve authentication type and cannot continue
    The POP3 service failed to start because
    IIS Error he system cannot find the file specified _找不到页面
    pku2575Jolly Jumpers
    pku2940Wine Trading in Gergovia
    pku3219二项式系数
    pku1029false coin
  • 原文地址:https://www.cnblogs.com/-citywall123/p/12902899.html
Copyright © 2011-2022 走看看