在创建派生类Object时将参数传递给基类构造函数

Cod*_*der 25 c++ oop constructor

考虑两个类AB

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

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


int main()
{
    A* aobj;
    B* bobj = new bobj(5);    
}
Run Code Online (Sandbox Code Playgroud)

现在这个类B继承了A.

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

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

Bat*_*eba 35

使用基本成员初始化:

class B : public A
{
public:
    B(int a) : A(a)
    {
    }
    ~B();
};
Run Code Online (Sandbox Code Playgroud)

  • 如果构造函数的定义位于不同的文件中怎么办? (2认同)

Som*_*ame 13

B::B(int x):A(x)
{
    //Body of B constructor
}
Run Code Online (Sandbox Code Playgroud)


Man*_*ngh 6

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

class B : public A
{
    using A::A;
};
Run Code Online (Sandbox Code Playgroud)

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

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

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