zoukankan      html  css  js  c++  java
  • C++中的初始化参数列表

    c++中以下几种情况的变量的初始化不可以写在构造函数里,而是要写在初始化参数列表中

    1.const常量

    class AA
    {
    public :
        const int num;
    public :
        AA():num(123)//在初始化列表里初始化const常量
        {
    
    
        }
    };
    int main()
    {
        AA aa;
        cout<<aa.num<<endl;
        return 0;
    }

    2.引用

    class AA
    {
    public :
        int &num;
        int b;
    public :
        AA():num(b),b(123)//在初始化列表里初始化引用
        {
    
    
        }
    };
    int main()
    {
        AA aa;
        cout<<aa.num<<endl;
        return 0;
    }

    3.包含另一个类的对象且该类的构造函数是自定义的

    class AA
    {
    public :
        AA(int x)
        {
    
           cout<<"AA";
        }
    };
    class BB
    {
    public :
        AA aa;
    public:
        BB():aa(123)//在初始化列表里初始化另一个类
        {
            cout<<"BB";
        }
    };
    

      特别的,我们来看一下下面这种情况:

    class AA
    {
    public :
        int a;
        int b;
    public :
        AA(int x):b(x),a(b)
        {
    
    
        }
    };
    int main()
    {
        AA aa(100);
        cout<<aa.a<<endl;
        cout<<aa.b<<endl;
        return 0;
    }

    我们会发现a的结果是有问题的,这是为什么呢?

    原因就是我们是先定义a的,自然在这姓的时候就先执行a的赋值,即将b的值赋予a,但此时b还没有值,所以结果只会输出b的值,我们可以通过以下两种方式改正

    1.调整变量的定义顺序

    public :
        int b;
        int a;
    public :
        AA(int x):b(x),a(b)
        {
    
    
        }
    

    2.调整赋值顺序

    public :
        int a;
        int b;
    
    public :
        AA(int x):b(a),a(x)
        {
    
    
        }
    

      

      

  • 相关阅读:
    含字母数字的字符串排序算法,仿Windows文件名排序算法
    WCF、WPF、Silverlight和区别(转)
    线程组的介绍
    python基础字符串的修改
    c语言
    python 字典
    单元测试相关
    python列表
    如何才能设计出好的测试用例
    字符串查找
  • 原文地址:https://www.cnblogs.com/curo0119/p/8533668.html
Copyright © 2011-2022 走看看