从抽象父类转换为子类

时间:2014-04-04 02:46:37

标签: c++

我有这段代码,

class IFoo
{
 public:
   IFoo(){}
   virtual ~IFoo(){}
   virtual void fooFunc() = 0;
};

class Foo : public IFoo
{
 public:
    Foo(){}
    virtual ~Foo(){}
    virtual void fooFunc(){/*impl*/}
};

class Poop : public IFoo
{
 public:
    Poop(){}
    virtual ~Poop(){}
    virtual void fooFunc(){/*impl*/}
};

class Bar
{
 public:
    Bar(){}
    ~Bar(){}
    void setFoo(Foo* foo){/*impl*/}
};

//in main
Poop* poop = new Poop;
Bar bar;
bar.setFoo(poop);

delete poop;

编译此代码会向我显示有关无效转换的错误消息。我应该使用什么样的铸件?

请指教。非常感谢!

1 个答案:

答案 0 :(得分:1)

Poop不是来自Foo,因此您无法通过Poop*预期Foo*,反之亦然。 PoopFoo都来自IFoo,因此您需要更改setFoo()以接受IFoo*而不是Foo*

void setFoo(IFoo* foo){/*impl*/}