0

我有 3 个类:第一个是 base带有派生类的纯虚拟基类derived1derived2...

第二个 foo持有基类的智能指针

第三个拥有一个智能 ptrfoo并具有一个重载的成员函数,我想依赖于 foo 中的 ptr 指向的派生类。

这是工作代码

#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;
}

然而,这似乎因错误没有匹配的成员函数而失败。所以我的问题首先是这种方法是否存在明显错误,其次是否有更有效/面向对象的设计方法可以更好地处理此类问题。

4

1 回答 1

0

原则上这是正确的做法:在基础上调用函数,多态会做正确的事情。

但是,您的代码将无法编译:funcbar 中的定义无效(至少我不确定您的意图 - 它们应该实现什么?)并且 func 调用callfunc取消引用指针两次。

如果您需要具体的修复,请给出确切的错误。

于 2013-09-12T11:27:52.493 回答