码迷,mamicode.com
首页 > 其他好文 > 详细

为什么子类的初始化列表不能初始化父类的成员

时间:2018-02-05 18:44:45      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:int   初始化列表   square   定义   问题   为什么   rectangle   矩形   类的构造函数   

为什么子类的初始化列表不能初始化父类的成员

  • C++初始化列表是一种效率更高的初始化方法,但也有一些不能使用的场景。

举个例子

  • 以下定义一个矩形,然后再定义一个正方形,继承自矩形。
  • 这段代码有问题吗?
...
class Rectangle{
public:
    Rectangle() :a(0), b(0){}
    Rectangle(int x, int y) :a(x), b(y){}

public:
    int a;
    int b;
};
class Square :public Rectangle
{
public:
    Square(int x):a(x) {}
};
...
  • 是的,这段代码是无法编译通过的。
  • 虽然乍一看没毛病,继承是public继承,构造是父类先构造,但为什么子类用初始化列表时会报错呢?
  • 而将子类的构造函数改成下面这样,竟然就可以了。它们明明看起来一样啊?
...
Square(int x)
{
    a = x;
}
...

查找原因

  • 这就要探讨以下初始化列表和普通初始化的区别。

为什么子类的初始化列表不能初始化父类的成员

标签:int   初始化列表   square   定义   问题   为什么   rectangle   矩形   类的构造函数   

原文地址:https://www.cnblogs.com/nonsupport/p/8418319.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!