C ++,使用初始化器但是用于函数?

时间:2018-06-18 10:23:29

标签: c++ inheritance polymorphism initializer-list initializer

看第一堂课:

     class A

{
    public:
        int x;
        A(int v) { x=v; }
};

另外,看看B级(我使用了继承)

class B : public A //Inheritance{
public:
    B(int v) :A(v) {y=v; }
    int y;
};

现在你能解释一下我们使用:A (v)的原因吗?我知道初始化列表可用于初始化成员变量,但是......构造函数?! 。 我认为有一些关于初始化程序的东西,我不知道,你能给我一个阅读它的好地方吗?

2 个答案:

答案 0 :(得分:3)

  

现在您可以解释为什么我们使用Child(int v):Parent(v)

因为这是在C ++中只有这样的构造函数时初始化超类的方法。

  

当我删除它时程序给我一个编译错误

因为你会隐式调用构造函数settings.py,没有参数,这是不存在的,因为你的未说明的编译错误无疑会说明。

答案 1 :(得分:0)

您的程序格式错误

根据class.ctor/8

  

如果对象的默认构造函数,则程序格式错误   隐式使用,constructor 可访问

您定义Parent(int)隐式定义的默认构造函数Parent()的那一刻已删除

因此,您需要显式调用用户定义的构造函数。

Child(int v):Parent (v) { }