使用基类指针调用基类的值构造函数的语法是什么?



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

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

base *ptr = new derived(args);

您可以在行中显式调用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 的 anothe 代码

#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;
}

最新更新