假设一个Domain
存储一个指向Shape
的指针。确切的形状(Triangle
或Rectangle
)在编译时并不知道,并且在读取输入后会清楚。在运行时,我可能需要访问派生结构的变量,但这是不可能的,因为指针指向基础结构。我发现另一种解决方案是“开启型”,但如答案here中指出的那样,它是不鼓励的。他还说多态的好习惯
当你使用多态性时,你不需要关心基类引用/指针背后的内容。
那么在这种情况下,我很在乎,所以它听起来像我不应该使用多态。我想下面我做的是一个糟糕的设计,但那么解决这个问题的好设计是什么?
struct Shape
{
int common_variable;
};
struct Triangle: Shape
{
int triangle_specific_variable;
};
struct Rectangle: Shape
{
int rectangle_specific_variable;
};
struct Domain
{
Shape* shape;
};
int main()
{
Domain domain;
//domain.shape = new Triangle(); // depends on input.
//domain.shape = new Rectangle(); // depends on input.
return 0;
}
我不太明白你的问题或你的榜样。看起来这里有一个多态的方法可能是有用的,但是我不太了解你想要做什么来帮助。 – callyalater
@callyalater:我需要访问派生结构特定的变量,但我不能因为指针指向基础结构。 – Shibli
如果你想通过'Base'指针访问'Derived'结构的成员,你可以使用'dynamic_cast',但是你需要创建'Base'类的多态类,例如虚拟的'virtual void f(){ }'功能。 – PcAF