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)
    {

    }

  

  

原文地址:https://www.cnblogs.com/curo0119/p/8533668.html

时间: 2024-08-29 14:58:49

C++中的初始化参数列表的相关文章

从配置文件中取得初始化参数

一般来说,对于一些程序,需要指定其中一些时常会动态变化的参数而不影响程序本身的运行.所以这些时候往往会将这些问题放到配置文件中.从而进行读取和修改就方便很多了.下面是分别配置到servlet中和context中的两种方式: 1.从servlet配置中设置初始化参数,如下: 1)设置参数(servlet的配置): <servlet> <servlet-name>SearchItemServlet</servlet-name> <servlet-class>co

C++中必须用参数列表初始化的4种情况

在C++中,必须使用构造函的参数列表来初始化成员变量的4种情况如下:(1)成员变量类型为 const int m_nData; class  test { private:    const int m_nData; public:    test():m_nData(120){} }; (2)类中有引用型变量  class  test  {   private:            int m_nData;      const int & m_nTest;   public:      t

c语言中对可变参数列表的简单理解

函数原型中一般情况下参数的数目是固定的,但是如果想在不同的时候接收不定数目的参数时该怎么办呢?c语言提供了可变参数列表来实现. 可变参数列表是通过宏来实现的,这些宏定义在stdarg.h的头文件中.头文件中声明了一个va_list类型和va_start.va_arg.va_end三个宏.我们使用可变参数列表的时候需要声明一个va_list类型的变量配合这三个宏使用. va_start(va_list变量名,省略号前面最后一个有名字的参数):在提取可变参数前必须调用这个宏实现初始化. va_arg

web.xml中servlet初始化参数的设置

<context-param><param-name>param1</param-name><param-value>value1</param-value></context-param><context-param><param-name>param2</param-name><param-value>value2</param-value></context-pa

C++中构造函数初始化成员列表总结

1.只能在构造函数初始化列表初始化的成员变量的类型? a.const成员变量 b.引用类型的成员变量 c.static不能在初始化列表中进行初始化 d.类成员变量中有自定义类型的变量最好在初始化列表中进行初始化 2.初始化列表的顺序? 初始化列表的初始化顺序是依据类成员变量定义的顺序来决定的. 3.关于static const是否应该在初始化成员列表中初始化? static const为全局静态常量,全局的意思是该变量属于整个类而非某个类实例,所以 不能再初始化列表中进行初始化.

在java 多态 中 父类作为参数列表的方法

Pet pet=new Dog();  //Pet是父类,Dog是子类. 这个方法是父类做类型,子类实例化. 相关例子: 员工回家的例子: 1,先做一个抽象父类,包含走的想法. package cn.day1; public abstract class Traffic { public abstract void run(); } 2,在创建一个类,包含回家的想法. package cn.day1; public class Employee { public void gohome(Traf

Object-C中编写省略参数的多参函数

Object-C中编写省略参数的多参数函数 引语: 在Object-C中,我们会遇到很多像NSLog这样的函数,其中参数的个数不确定,由程序员自由控制,在初始化数组,字典等方面应用广泛,那么,这类的函数是如何实现的呢?我们怎么编写我们自己的省略参数的函数呢?当然,这不是唯一的多参函数的处理方法,你也可以通过一个字典或者数组传递参数.但C为我们提供的这样的一种机制,无疑是最方便的. 一.了解几个概念 va_list C语言中定义的一个指针,用于指向当前的参数. va_start(ap,param)

初始化参数

Oracle提供了许多的初始化参数,通过这些参数对数据库及实例进行设置. 管理员可以查看这些参数的设置,也可以修改这些参数的值.初始化参数具有以下功能:·对实例进行设置,如设置SGA 中每种缓冲区的大小.·设置数据库的属性,如设置数据块的大小.·对用户进程进行设置,如设置最大的并发用户进程数..指定数据库中一些重要文件的路径.·对数据库资源的使用进行限制. 参数文件 初始化参数的值存储在参数文件中. Oracle提供了许多初始化参数,但是在参数文件中只对少量的初始化参数进行了设置,其他大部分参数

Oracle12c中配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB)

Oracle12c中的多宿主选项允许一个容器数据库(CDB)容纳多个独立的可插拔数据库(PDB).本文将展示如何配置实例参数和修改容器数据库(CDB)及可插拔数据库(PDB).1. 配置CDB中的实例参数(ALTER SYSTEM)配置CDB实例参数和配置非CDB实例参数没什么不一样.ALTER SYSTEM命令用来设置初始化参数,而有些数据库配置修改需要用ALTER DATABASE命令.作为一个特权用户登录且连接到根容器时,任何ALTER SYSTEM命令默认都将作用于该根容器.这意味着如下