Lis*_*Ann 1 c++ inheritance pointers shared-ptr
我们有:
Base;Derived。宣言:
class Derived : public Base
{
public:
Derived(); // ctor
~Derived(); // dtor
void MakeSomething();
private:
// some private stuff
}
Run Code Online (Sandbox Code Playgroud)
现在我们去我们的主要。这工作正常:
// ...
Derived derived;
derived.MakeSomething();
// ...
Run Code Online (Sandbox Code Playgroud)
相反,这不起作用:
// ...
boost::shared_ptr< Base > derived(new Derived);
derived->MakeSomething();
// ...
Run Code Online (Sandbox Code Playgroud)
编译器说:
错误:类“Base”没有成员“MakeSomething”
我知道它没有,事实上我想调用Derived的方法!我在继承和指针方面缺少什么?
附加问题:
MakeSomething()virtual in Base,因为Base属于我可以继承的第三方库;boost::shared_ptr< Base >,我不能直接使用boost::shared_ptr< Derived >;当您使用:
boost::shared_ptr< Base > derived = ...;
Run Code Online (Sandbox Code Playgroud)
您只能访问在Basethrough中声明的函数derived。最简单的类比是使用原始指针。
Base* ptr = new Derived;
Run Code Online (Sandbox Code Playgroud)
即使ptr指向 a Derived,也不能通过Derived指针访问成员函数。
你的选择是(我能想到的):
virtual成员函数Base,Derived, 或dynamic_cast适当使用以获取指向Derived.