自定义类的初始化列表


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

class ConstRef

{

public:

    ConstRef( int ii );

private:

    int i;

    const int ci;

    int & ri;

};

ConstRef::ConstRef( int ii )

{

    i = ii;         /* ok */

    ci = ii;        /* error: 不可以对 const类型 赋值 */

    ri = i;         /* 不可以对引用赋值 */

/* const 和 引用只可以初始化 */

这可以换一种方式,就是使用构造函数初始化列表

ConstRef::ConstRef (int ii):i (ii), ci(ii),ri (ii){}

必须 要对 所有的

  • const成员
  • 引用成员
  • 没有默认构造函数类类型 成员

使用 初始化列表的方式 来初始化

同时 初始化类成员 的次序 是跟我们所 写的 初始化列表顺序无关的,它只跟成员定义的顺序相关

(先执行基类构造函数,如果有)然后该类初始化列表语句,再执行花括号的语句!

时间: 2024-10-03 23:10:09

自定义类的初始化列表的相关文章

从Qt谈到C++(二):继承时的含参基类与初始化列表

提出疑问 当我们新建一个Qt的图形界面的工程时,我们可以看看它自动生成的框架代码,比如我们的主窗口名称为MainWindow,我们来看看mainwindow.cpp文件: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { } 不同于一般的继承,这里的父类的括号里带有参数,我们通常都使用过不带参数,甚至不带括号的基类名称.这里的基类为什么带着参数呢? C++继承与构造函数

转:C++类构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample { public:     int a;     float b;     //构造函数初始化列表     CExample(): a(0),b(8.8)     {}     //构造函数内部赋值     CExample()     {         a=0;         b=8.8;     } }; 上面的例子中两个构造函数的结果是一样

类的初始化列表的必要性

类的初始化列表的必要性: 1.当类中含有类类型成员时,必须用初始式进行初始化. 2.当类中含有const修饰的变量时,必须用初始式,因为在函数体里就是赋值了. 总结起来,可以初始化的情况有如下四个地方:1.在类的定义中进行的,只有const static  integral 修饰的变量.2.在类的构造函数初始化列表中, 包括const对象和Reference对象.3.在类的定义之外初始化的,包括static变量.因为它是属于类的唯一变量.4.普通的变量可以在构造函数的内部,通过赋值方式进行.当然

C++类构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class CExample {public:    int a;    float b;    //构造函数初始化列表    CExample(): a(0),b(8.8)    {}    //构造函数内部赋值    CExample()    {        a=0;        b=8.8;    }}; 上面的例子中两个构造函数的结果是一样的.上面的构造函数(使用初

C++类构造函数初始化列表(转)

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: { public:     int a;     float b;     //构造函数初始化列表     CExample(): a(0),b(8.8)     {}     //构造函数内部赋值     CExample()     {         a=0;         b=8.8;     } }; 上面的例子中两个构造函数的结果是一样的.上面的构造函数(使用初始化

C++类成员初始化列表的构造顺序

看下面代码, 输出结果是多少呢? class A{ public: A(int k) : j(k), i(j) { } void show() { cout << this->i << endl; cout << this->j << endl; } private: int i; int j; }; void test() { A a(3); a.show(); } int main(int argc, char const *argv[])

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员)、拷贝构造函数

C++ Primer 学习笔记_19_类与数据抽象(5)_初始化列表(const和引用成员).拷贝构造函数  从概念上将,可以认为构造函数分为两个阶段执行: 1)初始化阶段: 2)普通的计算阶段.计算阶段由构造函数函数体中的所有语句组成. 一.构造函数初始化列表 推荐在构造函数初始化列表中进行初始化 1.对象成员及其初始化 <span style="font-size:14px;">#include <iostream> using namespace std;

C++之类构造函数初始化列表

构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式.例如: class Example { public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0; b=8.8; } }; 例子中两个构造函数的结果是一样的.上面的构造函数(使用初始化列表的构造函数)显式的初始化类的成员:而没使用初始化列表的构造函数是对类的成员赋值

20160403_C++初始化列表与赋值

引用自:http://www.cnblogs.com/BlueTzar/articles/1223169.html 1. 两种初始化方式:构造函数初始化列表 和 构造函数内部赋值 (1) 构造函数初始化列表 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式. class CExample { public: int a; float b; // 构造函数初始化列表 CExample(): a(0),b(8.8) { // a赋值为0,b