可以指向任何继承结构的结构指针

问题描述 投票:0回答:1

我有这样的结构:

struct A {
    int aInt;
    string aString;
};

struct B : A {
    int bInt;
    string bString;
};

struct C : A {
    int cInt;
    string cString;
};

struct D : B {
    int dInt;
    string dString;
}

我希望能够声明一个

A *
并能够将 B、C 或 D 中的任何一个分配给该指针。例如,以下任何一项:

A *ptr = new B;

A *ptr = new C;

A *ptr = new D;

在这样做的过程中,我不允许访问任何不属于 A 的值。例如:

ptr->bInt

引发编译器问题。我想要实现的目标是可能的,还是 C++ 不允许我以这种方式使用结构?

c++ inheritance struct polymorphism
1个回答
0
投票

这是多态的基本模式。如果您想编写

delete ptr;
(您肯定会这样做),则需要虚拟析构函数。

struct A
{
    virtual ~A() {}
    virtual int getBint() { throw std::exception("wrong type"); }
};

struct B : A
{
    int getBint() override { return bInt; }
    int bInt;
}l
© www.soinside.com 2019 - 2024. All rights reserved.