假設一個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