在下面的代码中,我可以将ng-init
的返回值指定给指向ng-init
的指针,但不指向指向D::clone()
的指针。是否可以从基指针的调用中返回实际的多态类型?
B
答案 0 :(得分:4)
没有。在clone()
的基础B
上致电D
会将D*
广告投放回B*
。
如果您绝对肯定,可以通过static_cast<D*>
来解决此问题,如果您不确定,可以执行dynamic_cast<D*>
。如果您确定,那么您应该将变量b
变为D*
。
在C ++中,您应该在编译时编码您对程序状态的了解,而不管运行时的情况如何。通过将D*
存储到B* b
,您告诉编译器不“知道”指向的数据“是D
”。相反,您说“使用B*b
的代码应该对任何指向B
的指针有效。显然D* d = b->clone();
不能保证对每个指针有效B
}}