传递参数给基类构造函数,同时创造派生类对象(Pass Parameter to Base Class

2019-09-03 16:44发布

考虑两个班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 。 请给一些代码来演示这一概念。

Answer 1:

使用基座部件初始化:

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


Answer 2:

B::B(int x):A(x)
{
    //Body of B constructor
}


Answer 3:

如果你正在使用你的派生类的构造函数只是参数传递给基类,那么你也可以做到这一点在C ++ 11较短的方式:

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

注意之前,我还没有使用的“公共”访问符。 这是不需要的,因为继承的构造函数是隐与相同级别的访问在基类中声明。

有关详细信息,请参阅节继承构造在: https://en.cppreference.com/w/cpp/language/using_declaration

您也可以指https://softwareengineering.stackexchange.com/a/307648理解上构造继承限制。



Answer 4:

类A {公共:INT AVAL;

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

};

B类:公共A {公共:INT BVAL;

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

};

诠释的main(){

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

}

在这种情况下,你要分配的基类和派生类中的值。



文章来源: Pass Parameter to Base Class Constructor while creating Derived class Object