與生產中存在的代碼類似。你們能否回顧一下,告訴我這些代碼是否能夠一直運作良好?評論此C++代碼
class Base
{
public:
virtual void process() = 0;
};
class ProductA : public Base
{
public:
void process()
{
// some implementation.
doSomething();
}
void setSomething(int x)
{
}
virtual void doSomething()
{
// doSomething.
}
};
class ProductANew : public ProductA
{
public:
ProductANew() : ProductA() { }
void doSomething()
{
// do Something.
}
};
int main(int argc, char *argv[])
{
Base* bp = new ProductANew();
dynamic_cast<ProductA*>(bp)->setSomething(10);
bp->process();
}
我猜'class ProductA'的定義實際上應該從'class ProductA:public Base'開始。 – 2010-07-05 10:13:12
您的擔心是什麼 - 動態轉換?這些來自/爲什麼不能使用ProductA *而不是Base * - 您是否將ProductA存儲在通用陣列或類似的數據中? – Rup 2010-07-05 10:13:43
那裏有一個具體的問題,就像dynamic_cast的這種使用總是工作等等?對於記錄,如果RTTI不適合,dynamic_cast可能會給你一個空指針,而你不需要檢查就直接解引用。但是,如果這實際上是你的生產代碼,並且在這種實例化之後立即執行轉換,那麼你沒有什麼可擔心的。哦,而且您的ProductA不會從Base繼承... – falstro 2010-07-05 10:14:16