如何初始化父母的成员?

时间:2010-11-28 19:06:44

标签: c++

class Parent

{
public:
    int member;

    Parent():
        member(0)
    {
    }
};

class Child:
    public Parent
{
public:
    Child():
        member(1)  //error
    {

    }
};

5 个答案:

答案 0 :(得分:6)

class Parent{
private:
    int member;
public:
    Parent():
        member(0){
    }
protected:

    explicit Parent(int x):
        member(x){
    }
};

class Child:
    public Parent {
public:
    Child():
        Parent(1){
    }
};

答案 1 :(得分:1)

将您的代码更改为:

class Child:
    public Parent
{
public:
    Child()
    {
      member = 1;
    }
};

或尝试:

class Child:
    public Parent
{
public:
    Child():Parent(),member(1)
    {
    }
};

答案 2 :(得分:1)

class Parent

{
public:
    int member;

    Parent(int m = 0):
        member(m)  // constructor takes an argument, default as 0
    {
    }
};

class Child:
    public Parent
{
public:
    Child():
        Parent(1)  // refer to super class's constructor here
    {

    }
};

答案 3 :(得分:0)

只需在函数体中使用member = 1;

说明:初始化列表仅适用于类的自己的字段(包括父类的构造函数)。除此之外,将首先构造父类(因此,当您的子类被构造时,它的初始化列表已经被执行),因此您的代码将再次构造成员,这是没有意义的。

(资料来源:http://www.cplusplus.com/forum/general/29860/

答案 4 :(得分:0)

初始化列表允许使用除默认构造函数之外的其他构造函数。显然,Child构造函数不能选择除Parent构造函数之外的任何东西。所以有两个解决方案:

  • 将一个构造函数添加到Parent执行您想要的操作,并在需要时对其进行保护
  • 只需在Child构造函数中添加一个赋值。