34

考虑两个类AB

class A
{
public:
    A(int);
    ~A();
};

class B : public A
{
public:
    B(int);
    ~B();
};


int main()
{
    A* aobj;
    B* bobj = new bobj(5);    
}

现在该类B继承了A.

我想创建一个对象B。我知道创建派生类对象也会调用基类构造函数,但这是没有任何参数的默认构造函数。

我想要的是B获取一个参数(比如 5),并将其传递给A. 请显示一些代码来演示这个概念。

4

4 回答 4

50

使用基成员初始化:

class B : public A
{
public:
    B(int a) : A(a)
    {
    }
    ~B();
};
于 2013-05-16T11:14:48.457 回答
14
B::B(int x):A(x)
{
    //Body of B constructor
}
于 2013-05-16T11:11:58.653 回答
7

如果您使用派生类构造函数只是将参数传递给基类,那么您也可以在 C++11 中以更短的方式执行此操作:

class B : public A
{
    using A::A;
};

请注意,我之前什至没有使用过“公共”访问说明符。这不是必需的,因为继承的构造函数被隐式声明为具有与基类相同的访问级别。

有关更多详细信息,请参阅继承构造函数部分:https ://en.cppreference.com/w/cpp/language/using_declaration

您也可以参考https://softwareengineering.stackexchange.com/a/307648以了解构造函数继承的限制。

于 2018-07-19T15:46:30.690 回答
0

A类{公共:int aval;

A(int a):aval(a){};
~A();

};

B类:公共A {公共:int bval;

B(int a,int b):bval(a),A(b){};
~B();

};

int main() {

  B *bobj = new bobj(5,6);
//or 
  A *aobj=new bobj(5,6); 

}

在这种情况下,您正在为基类和派生类分配值。

于 2018-11-20T11:58:17.917 回答