【发布时间】:2013-11-17 03:30:57
【问题描述】:
我有一个父类 A,它有两个子类(B 和 C)。然后我在A中有以下虚函数:
virtual void X(boost::shared_ptr<A> a) = 0;
在扩展父类的两个子类中,我覆盖了X():
void X(boost::shared_ptr<B> b);
和
void X(boost::shared_ptr<C> c);
是否可以这样做,因为我遇到了问题,甚至不确定标准是否允许这样做?
【问题讨论】:
-
当覆盖虚函数时,C++ 支持协变结果类型,但不支持协变参数类型。但是请注意,即使支持后者,它也不适用于您的情况,因为
shared_ptr<Base>和shared_ptr<Derived>是不相关的类型。 -
@IgorR。你确定是因为我的编译器看起来好像它们是相关的吗?
-
由于类型转换运算符,
shread_ptr<Derived>可转换 为shared_ptr<Base>。但是这些类是不相关的,因为它们只是shared_ptr模板的实例化,具有不同的模板参数。
标签: c++ inheritance boost polymorphism overriding