C++ 派生类';通过取消引用boost::shared\u ptr找不到方法
我们有:C++ 派生类';通过取消引用boost::shared\u ptr找不到方法,c++,pointers,inheritance,shared-ptr,C++,Pointers,Inheritance,Shared Ptr,我们有: 基类base 派生类派生类 声明: class Derived : public Base { public: Derived(); // ctor ~Derived(); // dtor void MakeSomething(); private: // some private stuff } 现在我们进入我们的主要课程。这很好: // ... Derived derived; derived.MakeSomething(); // ... 相反,这是行不
- 基类
李>base
- 派生类
派生类
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();
// ...
/。。。
boost::shared_ptr 派生(新派生);
派生->生成某物();
// ...
编译器说:
错误:类“Base”没有成员“MakeSomething”
我知道它没有,事实上我想调用派生的方法!继承和指针缺少什么
其他问题:
- 我不能在
Base
中声明MakeSomething()
虚拟,因为Base
属于我可以继承的第三方库李>
- 我还有其他类和方法需要我通过
boost::shared\u ptr
,我不能直接使用boost::shared\u ptr
李>
- …应避免静态铸造吗
使用时:
boost::shared_ptr< Base > derived = ...;
即使ptr
指向派生的
,也不能通过指针访问派生的
的成员函数
你的选择是(我能想到):
在Base
中定义virtual
成员函数
创建指向派生的的指针,或
适当地使用dynamic\u cast
获取指向派生的的指针
使用时:
boost::shared_ptr< Base > derived = ...;
即使ptr
指向派生的
,也不能通过指针访问派生的
的成员函数
你的选择是(我能想到):
在Base
中定义virtual
成员函数
创建指向派生的的指针,或
适当地使用dynamic\u cast
获取指向派生的的指针
类Base
应声明virtualvoid MakeSomething()=0代码>(还有一个虚拟析构函数)…所以使用boost::static\u pointer\u cast(派生)->MakeSomething()
如果要调用派生的
方法,请获取指向派生的
的指针。。。。因此,只要从一开始就使用boost::shared_ptr
,并在需要boost::shared_ptr
时传递它?@LisaAnnboost::shared_ptr
可以隐式转换为boost::shared_ptr
。您可以从一开始就使用前者类Base
应该声明virtualvoid MakeSomething()=0代码>(还有一个虚拟析构函数)…所以使用boost::static\u pointer\u cast(派生)->MakeSomething()
如果要调用派生的
方法,请获取指向派生的
的指针。。。。因此,只要从一开始就使用boost::shared_ptr
,并在需要boost::shared_ptr
时传递它?@LisaAnnboost::shared_ptr
可以隐式转换为boost::shared_ptr
。您可以从一开始就使用前者这就是为什么我们有纯虚拟函数和接口。在任何一本优秀的C++书籍中都有。我不知道虚拟函数和界面在我无法修改基类时能帮助我,在我的C++书籍中从来没有发现这样的例子适合初学者。抱歉,这就是为什么我们有纯虚拟函数和接口。在任何一本优秀的C++书籍中都有。我不知道虚拟函数和界面在我无法修改基类时能帮助我,在我的C++书籍中从来没有发现这样的例子适合初学者。很抱歉