c++ - 使用基类指针调用基类的值构造函数的语法是什么?
问题描述
基类有一个接受参数的值构造函数。它没有默认构造函数。
下面使用一个base
类指针,它设置为等于derived
堆上某个类对象的地址。这显式调用 的值构造函数derived
。有没有办法显式调用base
这一行中的值构造函数?我理解另一种选择是您可以让派生类构造函数调用基类构造函数。
base *ptr = new derived(args);
解决方案
您可以在您的行中显式调用 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;
}
推荐阅读
- hl7-fhir - 推荐用于 CDS 反馈的 FHIR 类型
- vue.js - vue js重定向到相同的路径,但后退按钮上有参数
- kubernetes - 使用亲和力将两个 Kubernetes pod 分开,标签值未知
- visual-studio-code - VS Code No Module Found 错误 - 需要帮助在本地运行 PySpark 代码
- ios - Crashlytics 和 XCode Crash Organizer 是否相互排斥?
- networking - 是否有任何支持 Multilink PPP 的嵌入式 IP 堆栈库?
- vaadin - 我想在悬停分离器时触发手柄受到影响
- django - 在模板中显示后存储消息
- angular - 如何从Angular中的组件初始化包含其他接口的接口
- c - 使用单个 scanf() 接收 C 中用户输入的不同变化