使用boost :: shared_ptr时的多态性

时间:2013-11-17 01:23:32

标签: c++ boost c++11 polymorphism override

如果我有父类A和子类B和C的继承层次结构,我如何通过boost :: shared_ptr<>使用多态性?这样一个功能

virtual void my_func(boost::shared_ptr<A> x) = 0;

可以实现为

void my_func(boost::shared_ptr<B> x);

void my_func(boost::shared_ptr<C> x);

?即使存在shared_ptr概念,多态仍然有效吗?

(很高兴知道这是否适用于std :: shared_ptr以及boost)

1 个答案:

答案 0 :(得分:1)

在C ++中覆盖函数时,参数类型必须与基类中的参数类型相同。允许的唯一变体是,如果基类返回指针或引用,则重写函数可能具有协变返回类型。

对于论证类型,任何潜在的变化都取决于它是什么类型的论证:

  • 输入参数必须是逆变的:如果您知道更特殊的类可以处理它们,您可以允许传递更一般的参数。
  • 输出参数需要是协变的:任何调用都可以处理基类型的对象,也就是说,当知道类是特殊的时,可以获得更特殊的东西。
  • C ++没有指示输入或输出参数,即参数总是输入和输出参数。因此,它们是不变的。