c++ - 派生类中基类的指针作为成员变量

标签 c++ inheritance

我从代码中看到派生类有一个成员变量,它是指向其基类的指针,就像这样

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/

相关文章:

c++ - 分段堆栈是否可以与其他库自由使用

c++ - 连接到队列管理器 C++ 时出现 MQ 错误 2058

c++ - C++继承更改成员

c# 具有非抽象方法的抽象类抛出 ReflectionTypeLoadException

C++:缓存 JSON 而不是对象会减少内存消耗吗?

C++ 数组大小初始化

c++ - 在 Fortran 程序中使用 Boost 图形库 (BGL)

C++ - 继承和初始化问题

python - C++中如何继承重载运算符的功能

java - Autowiring Spring 父类(super class)