我有这样的结构:
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++ 不允许我以这种方式使用结构?
这是多态的基本模式。如果您想编写
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