首页 > 解决方案 > 使用基类指针调用基类的值构造函数的语法是什么?

问题描述

基类有一个接受参数的值构造函数。它没有默认构造函数。

下面使用一个base类指针,它设置为等于derived堆上某个类对象的地址。这显式调用 的值构造函数derived。有没有办法显式调用base这一行中的值构造函数?我理解另一种选择是您可以让派生类构造函数调用基类构造函数。

base *ptr = new derived(args);

标签: c++inheritanceconstructor

解决方案


您可以在您的行中显式调用 value 构造函数,base如下所示(但请注意参数列表不同)

   #include<iostream>

    class Base{

    public:
        Base(int arg){std::cout<<"\nBase constructor";}
        Base()=default;
        virtual ~Base(){}
    };

    class Derived:public Base{
    public:
        Derived(double arg){
            std::cout<<"\nDerived constructor";
        }
        using Base::Base;//This is the key for the answer

    };


    int main(){

        Base* derivedPtr1 {new Derived{0.2}};//calls derived ctor
        Base* derivedPtr2 {new Derived{2}};//calls base ctor
        delete derivedPtr2;
        delete derivedPtr1;

    }

没有默认 ctor 的代码

#include<iostream>

class Base{

public:
    Base(int arg){std::cout<<"\nBase constructor";}
    virtual ~Base(){}

};

class Derived:public Base{
int k{};
public:
    Derived(double arg):Base(2){
        std::cout<<"\nDerived constructor";
    }
    using Base::Base;
    Derived()=default;
    ~Derived(){std::cout<<"\nDerived destructor";}

};


int main(){

    Base* derivedPtr1 {new Derived{0.2}};
    Base* derivedPtr2 {new Derived{2}};
    delete derivedPtr2;
    delete derivedPtr1;

}

推荐阅读