衍生课程'通过解除引用boost :: shared_ptr找不到方法

时间:2015-09-17 18:14:38

标签: c++ pointers inheritance shared-ptr

我们有:

  • 基类Base;
  • 派生类Derived

声明:

class Derived : public Base
{
public:
  Derived();  // ctor
  ~Derived(); // dtor
  void MakeSomething();
private:
  // some private stuff
}

现在我们去主要的。这很好用:

// ...
Derived derived;
derived.MakeSomething();
// ...

相反,这不起作用:

// ...
boost::shared_ptr< Base > derived(new Derived);
derived->MakeSomething();
// ...

编译说:

  

错误:班级&#34;基地&#34;没有会员&#34; MakeSomething&#34;

我知道它没有,事实上我想打电话给Derived的方法!我对继承和指针缺少什么?

其他问题:

  • 我无法在MakeSomething()中声明Base虚拟,因为Base属于我可以继承的第三方库;
  • 我有其他课程和方法要求我通过boost::shared_ptr< Base >,我不能直接使用boost::shared_ptr< Derived >;
  • ......应该避免静电铸造吗?

1 个答案:

答案 0 :(得分:4)

使用时:

boost::shared_ptr< Base > derived = ...;

您只能访问Basederived中声明的功能。最简单的比喻是使用原始指针。

Base* ptr = new Derived;

即使ptr指向Derived,您也无法通过指针访问Derived的成员函数。

您的选择(我能想到):

  1. virtual
  2. 中定义Base个成员函数
  3. 创建指向Derived
  4. 的指针
  5. 恰当地使用dynamic_cast获取指向Derived
  6. 的指针