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

  

  

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

  1. Qt中新建类构造函数的初始化参数列表

    使用Qt-creator自动生成一个窗体应用程序时会自动创建一个新的类,我的程序中名为MyDialog,类的定义为: #ifndef MYDIALOG_H #define MYDIALOG_H #in ...

  2. oracle中有关初始化参数文件的几个视图对比

    涉及oracle中有关初始化参数文件的几个视图主要有:v$paraemter,v$parameter2,v$system_parameter,v$system_parameter2,v$spparam ...

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

    <context-param><param-name>param1</param-name><param-value>value1</param- ...

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

    1.只能在构造函数初始化列表初始化的成员变量的类型? a.const成员变量 b.引用类型的成员变量 c.static不能在初始化列表中进行初始化 d.类成员变量中有自定义类型的变量最好在初始化列表中 ...

  5. oracle中的初始化参数文件

    oracle初始化参数文件管理 oracle实例是指运行状态下的oracle软件,是由内存结构跟一些进程结构组成的,主要实现数据库的访问跟控制功能,是oracle的核心. 初始化参数文件是oracle ...

  6. Servlet中的初始化参数、上下文参数、以及@Resource资源注入

    配置初始化参数.上下文参数.以及使用@Resource注解进行资源注入,目的是为了降低代码的耦合度.当项目需求进行变更的时候,不需要反复更改源代码,只需更改web.xml文件即可. 一:Servlet ...

  7. application 从web.xml中获取初始化参数

    <span style="font-size:24px;"> </span> 1.web.xml中的配置部分 <context-param>   ...

  8. 使用服务器参数文件(SPFILE)管理初始化参数

    传统上,Oracle数据库的初始化参数存储在文本初始化参数文件中.为了更好的可管理性,您可以选择在二进制服务器参数文件中维护初始化参数,该文件在数据库启动和关闭期间保持不变.本节介绍服务器参数文件,并 ...

  9. JavaWeb---通过ServletConfig获取Servlet的初始化参数

    package com.zyz; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import j ...

随机推荐

  1. 出现“基础链接已关闭,无法链接到远程服务器"错误的解决办法

    一些用户在安装一些软件或是系统做某些修改后,采集器就没无登录或是无法获取到网页.登录或是使用httppostget工具会出现 ”基础链接已关闭,无法链接到远程服务器“的提示.经分析,是系统Socket ...

  2. linux环境下安装tomcat6

    1)下载apache-tomcat-6.0.10.tar.gz 2)#tar -zxvf apache-tomcat-6.0.10.tar.gz ://解压 3)#cp -R apache-tomca ...

  3. vue v-for 和 v-if 、v-else一起使用造成的bug

    现象:导致v-else 执行v-for的length次数, 从现象看应该v-for先解析,然后将v-if和v-else包在其中 解决方案:很简单,tempalte 将v-if v-else 隔离到最外 ...

  4. 各种语言中的可变参数(java、python、c++、javascript)

    索引: java python c++ js 1.Java public class Animal { // 接受可变参数的方法 void eat(String... Objects) { for ( ...

  5. 修改Nginx配置文件来隐藏index.php

    找到你要修改的域名对应nginx配置文件(vhost下),添加如下代码 location / { if (!-e $request_filename) { rewrite ^(.*)$ /index. ...

  6. bzoj 2427 软件安装 - Tarjan - 树形动态规划

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). 但是 ...

  7. Python3基础 setattr 设置对象的属性值,如果属性不存在就创建

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  8. luoguP2572 [SCOI2010]序列操作

    题目&&链接 反正数据都是一样的,luogu比较友好 luogu bzoj lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变 ...

  9. 【传输对象】kafka传递实体类消息

    工具类 负责对象字节数组的相互转换,传输数据用 package com.yq.utils; import java.io.ByteArrayInputStream; import java.io.By ...

  10. 【第六章】 springboot + 事务

    在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是servic ...