与生产中存在的代码类似。你们能否回顾一下,告诉我这些代码是否能够一直运作良好?评论此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