C++ 使用boost::shared_ptr时的多态性
如果我有一个包含父类A和子类B和C的继承层次结构,那么如何通过boost::shared_ptr使用多态性,以便C++ 使用boost::shared_ptr时的多态性,c++,boost,c++11,polymorphism,overriding,C++,Boost,C++11,Polymorphism,Overriding,如果我有一个包含父类A和子类B和C的继承层次结构,那么如何通过boost::shared_ptr使用多态性,以便 virtual void my_func(boost::shared_ptr<A> x) = 0; virtualvoid my_func(boost::shared_ptr x)=0; 可以实现为 void my_func(boost::shared_ptr<B> x); void my_func(boost::shared_ptr x); 及 vo
virtual void my_func(boost::shared_ptr<A> x) = 0;
virtualvoid my_func(boost::shared_ptr x)=0;
可以实现为
void my_func(boost::shared_ptr<B> x);
void my_func(boost::shared_ptr x);
及
void my_func(boost::shared_ptr x);
??即使有共享的ptr概念,多态性仍然有效吗
(很好地知道这对于STD::SyrdYpPTR,Boost)
> P>当C++中重写函数时,参数类型必须与基类中的函数相同。唯一允许的变化是,如果基类返回指针或引用,则重写函数可能具有协变返回类型 对于参数类型,任何潜在的变化都取决于它是什么类型的参数:- 输入参数必须是逆变的:如果您知道更特殊的类可以处理更一般的参数,则可以允许传入这些参数
- 输出参数必须是协变的:任何调用都可以处理基类型的对象,也就是说,当知道类是特殊的时,可以得到更特殊的东西
- C++没有输入或输出参数的指示,即参数始终是输入和输出参数。因此,它们是不变的
base.f(x)
,则必须调用derived.f(x)
。当derived
将x
限制为与base
使用的类相比的派生类时,很明显derived.f(x)
不能用所有输入调用base.f(x)
可以是,并且存在LSP冲突。
void my_func(boost::shared_ptr<C> x);