【问题标题】:Polymorphic overriding多态覆盖
【发布时间】: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&lt;Base&gt;shared_ptr&lt;Derived&gt; 是不相关的类型。
  • @IgorR。你确定是因为我的编译器看起来好像它们是相关的吗?
  • 由于类型转换运算符,shread_ptr&lt;Derived&gt;转换shared_ptr&lt;Base&gt;。但是这些类是不相关的,因为它们只是 shared_ptr 模板的实例化,具有不同的模板参数。

标签: c++ inheritance boost polymorphism overriding


【解决方案1】:

This was talked about recently。你没有覆盖它。 You're hiding it.

不可能覆盖这样的函数。覆盖时要匹配的函数签名

【讨论】:

  • 考虑使用CRTP
猜你喜欢
  • 2012-02-08
  • 2011-06-26
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-14
  • 1970-01-01
相关资源
最近更新 更多