我有關於多態性問題C++鑄造衍生指針或設計錯誤
using namespace std;
class Base {
public:
Base(int v) { u = v; };
virtual ~Base(){};
int u;
void f() { /* operations on u */ };
};
template<class T>
class Derived: public Base {
public:
T t;
Derived() { }
void g() { std::cout << u; /* operations on t and u */ }
};
int main() {
Base *b = new Base(1);
b->f();
if (b->u == 1) {
Derived<int> *d = dynamic_cast<Derived<int> *>(b);
d->g();
}
return 0;
}
隨着D->克()會有段錯誤。轉換後可以在Derived對象中訪問u嗎?這個程序的目的是構造一個未知類型的類(關於這個類的信息只有在類對象被構造後纔可用,例如一個讀取jpg文件的類,事先不知道深度信息)。還是有這種問題的設計模式?感謝您的任何提示。
但'b' *不是'派生'對象,試圖做你所做的就是*未定義的行爲*。您可以查看序列化庫來查看它們如何處理這些情況,但通常的方法是保存一些元數據,以告知實際對象的實際類型和大小*。如果你看看例如[Microsoft MFC框架](http://www.sorting-algorithms.com/),它使用['DECLARE_DYNAMIC'](https://msdn.microsoft.com/en-us/library/ywz9k63y.aspx)宏以啓用更多運行時信息。 –
請注意,如果轉換失敗,dynamic_cast將返回一個空指針,在本例中它將執行該指針。 –