使用基类指针调用基类的值构造函数的语法是什么?
What is the syntax for calling a base class's value constructor with a base class pointer?
基类有一个接受参数的值构造函数。它没有默认构造函数。
下面使用一个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;
}
相关文章:
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- C++初始化基类
- 如何通过派生类函数更改基类中的向量
- 如何定义一个纯抽象基类
- 如何使用基类指针引用派生类成员
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 为什么此派生对象无法访问基类的后递减方法?
- 公开最直接的基类模板名称
- 当基类是依赖类型时,这是一个缺陷吗
- 使用基类指针调用基类的值构造函数的语法是什么?
- c++:需要正确的语法以避免 MISRA 14-6-1 警告.具有依赖基类的类模板
- 为什么在间接使用基类 typedef 时不断出现语法错误,而直接使用它就可以了?
- 名称隐藏和访问基类的非虚函数(语法)