我从代码中看到派生类有一个成员变量,它是指向其基类的指针,就像这样
class Base {
private:
int a;
int b;
int d;
void init(){// ... }
public:
Base(int a_ , int b_) : a(a_), b(b_){
init();
}
Base() = default;
int getA(){return a;}
}
class Derived : public Base {
private:
Base* base;
int c;
public:
Derived(int a_, int b_, int c_): base(new(Base(a_, b_)), c(c_){base->getA() // for initialization of another function};
}
int main(){
Derived derived(0,0,0);
}
这是聪明的事情吗?如果我们可以从 Derived 调用 Base 的 public 或 protected 方法,为什么或如何在 Derived 类中有一个 Base 成员?
另一个问题是:我得到了两次 Base 构造,对吗?一个用于调用默认构造函数的派生对象,另一个来自调用非默认构造函数的初始化列表。
编辑:
我提供的代码是我进入的一个非常简短的版本。他们使用派生的基本成员来做很多事情,即调用 Base 的成员作为其他函数的参数或初始化 Derived 的成员。我的想法是它可能只是为了封装。但这肯定很奇怪。
希望我的问题不会太困惑!我只是不明白这样的东西的主要用途是什么!
最佳答案
通过查看此代码无法确定有用性(或智能性)(除非这是这些类的最终版本,在这种情况下,在派生类中实例化基类似乎没有用,因为它没有被使用),这取决于你如何将使用派生类中的基础对象。
请注意,派生类中的基变量与派生类继承的基类无关。
代码实例化 2 对象,一个是 Derived 类的名为 derived 的对象,另一个是派生类内部的名为 base 的对象(在派生构造函数中用 new 实例化)。
警告:上面的代码,如果没有为 Derived 类定义析构函数,会导致在 Derived 类对象被破坏时丢失基类对象的删除。
关于c++ - 派生类中基类的指针作为成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61246005/