【发布时间】:2023-03-17 14:34:01
【问题描述】:
我有 3 个类:第一个是纯虚拟基类 base 和派生类 derived1、derived2...
第二个foo 持有一个指向基类的智能指针
第三个拥有一个指向foo 的智能指针,并且有一个重载的成员函数,我想依赖于 foo 中的指针指向的派生类。
这是工作代码
#include<iostream>
#include<boost/shared_ptr.hpp>
using namespace std;
class base{
public:
base(){}
~base(){}
virtual void FuncDer()=0;
};
class derived1 : public base{
derived1(){}
virtual void FuncDer(){
cout<<"derived function1!"<<endl;
}
};
class derived2 : public base{
derived2(){}
virtual void FuncDer(){
cout<<"derived function2!"<<endl;
}
};
class foo {
public:
foo();
~foo();
boost::shared_ptr<base> get_base_ptr(){
return base_obj;
}
private:
boost::shared_ptr<base> base_obj;
};
class bar {
public:
bar();
~bar();
void callfunc(){
func(foo_ptr->get_base_ptr());
}
private:
boost::shared_ptr<foo> foo_ptr;
void func(boost::shared_ptr<derived1>);
void func(boost::shared_ptr<derived2>);
};
int main()
{
cout<<"test"<<endl;
return 0;
}
然而,这似乎失败了,错误是没有匹配的成员函数。所以我的问题首先是这种方法是否存在明显错误,其次是否有更有效/面向对象的设计方法可以更好地处理此类问题。
【问题讨论】:
-
是否可以在派生类中增加以
bar类的对象为参数的虚函数,并将bar::func函数改为public? -
抱歉耽搁了我直到现在才有机会看这个。我现在发布了重现我的错误的工作代码。
标签: c++ oop inheritance overloading