peter_wu1994 2016-12-15 08:09 采纳率: 0%
浏览 3429
已结题

c++ 派生类 拷贝构造函数 调用基类的构造函数

在进入派生类(derived)的拷贝构造函数之前,就已经调用了基类(based)的构造函数,
无论你有没有显示的调用。
一般派生类是这种形式:
derived(const derived & d):based(d)
{}

为什么使用下列形式不行
derived(const derived & d)
{
based::based(d);
}
即在派生类构造函数内部调用基类构造函数。调试的时候发现无法访问基类的私有成员。
为什么使用初始化列表就可以访问基类的私有成员

  • 写回答

9条回答

  • 企鹅爱吃方便面 2016-12-15 09:31
    关注

    1.成员类型是没有默认构造函数的类。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。
    2.const成员或引用类型的成员。因为const对象或引用类型只能初始化,不能对他们赋值。
    以上两种只能使用初始化列表去初始化。一般情况下,选用初始化列表初始化。
    另外,不能直接使用父类的构造器,原因是父类的构造器是不能被子类继承的。
    构造函数也不能被当做一般的函数来使用。

    评论

报告相同问题?

悬赏问题

  • ¥15 mmocr的训练错误,结果全为0
  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀