初始化列表来初始化

有一个类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的构造函数初始化列表来初始化的是( )

解析:常量必须在初始化列表中初始化,否则,由于常量无法修改,在其他任何地方做为左值出现都将报错;A::a、B::b即为此类型;其中,A::a在类B中由B::a覆盖,但B::c必须经过类A的初始化列表才能初始化。引用类型必须初始化,因此也只能在初始化列表中初始化;A& e即为此类型。
时间: 2024-08-09 23:34:28

初始化列表来初始化的相关文章

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

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

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

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

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

#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 << "

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

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

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修饰的类成员                         

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

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,而它拥有一组参数时

c++11之初始化列表

一.前言 C++的学习中,我想每个人都被变量定义和申明折磨过,比如我在大学笔试过的几家公司,都考察了const和变量,类型的不同排列组合,让你区别有啥不同.反正在学习C++过程中已经被折磨惯了,今天再来看看重温下那段"辉煌的历史".先来看一段代码: Player pa; // (a) Player pb(); // (b) Player pc = Player(); // (c) Player pd(Player()); // (d) pd = Player() // (e) a,b,