构造函数,哪些成员变量一定要通过初始化列表来初始化?

class A {
...
private:
   int &a;
};
class B : public A {
...
private:
     int a;
public:
     const int b;
     A c;
     static const char* d;
     A* e;
};

答案是  b  c

构造函数初始化时必须采用初始化列表一共有三种情况,

1.需要初始化的数据成员是对象(继承时调用基类构造函数)    这一点c符合

2.需要初始化const修饰的类成员                                            这一点b符合

3.需要初始化引用成员数据

时间: 2024-10-24 12:06:11

构造函数,哪些成员变量一定要通过初始化列表来初始化?的相关文章

为什么 没有缺省构造函数的类类型成员 必需要在初始化列表 里初始化 ?

名词解释 1.缺省构造函数:类的构造函数无参或参数默认值统称为缺省构造函数. 2.初始化列表:与其它函数不同,构造函数除了有名字,参数列表和函数体外还可以有初始化列表.列表以冒号开始后跟以逗号隔开的初始化字段.类成员是在构造函数的初始化列表创建好的,在创建类成员的同时,给成员变量一个初始化值. 在解释原因之前,需要了解构造函数是如何执行的 构造函数的执行过程 首先,构造函数的执行分为三步.先创建函数的形参(如果没有形参这步可以省略),然后执行初始化列表(即使没有初试化列表),最后执行函数体的内容

C++构造函数及成员变量

class MyClass { public: int m_age; float m_hight; MyClass() { } ~MyClass() { } MyClass(int age, float hight) { this.m_age = age; this.m_hight = hight; } }; // 对于构造函数及成员变量的几点简单说明 // 1. 成员变数的内存排布顺序与定义顺序有关,即先写在前面 // 2. 带参数的构造函数可以写成如下形式: // MyClass(int a

构造函数、初始化列表来初始化字段、析构函数、拷贝构造函数

#include <iostream> using namespace std; class Line { public: int getLength( void ); Line( int len ); // 简单的构造函数 Line( const Line &obj); // 拷贝构造函数 ~Line(); // 析构函数 private: int *ptr; }; // 成员函数定义,包括构造函数 Line::Line(int len) { cout << "

只能在初始化列表中初始化的变量

1.const变量 有几个容易混淆的地方: (1)const 的变量只能通过构造函数的初始化列表进行初始化:(貌似在c++11中可以正常编译) (2)static 的变量只能通过在类外重新定义进行初始化: (3)static const 变量 只能通过在类中直接用”=”进行赋值. 2.引用 引用只能初始化,不能赋值 3.不含默认构造函数的类的对象 因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数初始化. 构造函数的函数体内只能做赋值而不是初始化,因此初始化const对

c++中初始化列表的初始化变量顺序问题

例题来看:请问下面程序打印出的结果是什么? 1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class base 7 { 8 private: 9 int m_i; 10 int m_j; 11 public: 12 base(int i):m_j(i),m_i(m_j); 13 base():m_j(0),m_i(m_j){} 14 int get_i() {return m_i;} 1

初始化列表来初始化

有一个类B继承子类,他们数据成员如下: class A{ ... private:   const int a; }; class B : public A{ ... private:   int a; public:   const int b;   A c;   static const char* d;   A& e; }; 则这些成员变量一定要通过A或者B的构造函数初始化列表来初始化的是( ) 解析:常量必须在初始化列表中初始化,否则,由于常量无法修改,在其他任何地方做为左值出现都将报错

【转】构造函数中,成员变量一定要通过初始化列表来初始化的几种情况

1.类成员为const类型 2.类成员为引用类型 #include <iostream> using namespace std; class A { public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i << " " << j << endl; } private: const

【c++】必须在类初始化列表中初始化的几种情况

转自:http://www.cnblogs.com/kaituorensheng/p/3477630.html 1. 类成员为const类型 2. 类成员为引用类型 #include <iostream> using namespace std; class A { public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i <<

必须在初始化列表中初始化的---4种情况

1.当初始化 const member时 2.当初始化reference menber 时 (引用成员变量) 3.当调用一个base class的constructor,而它拥有一组参数时 4.当调用一个member class 的constructor,而它拥有一组参数时