0

我有一个AbstractFactory,WinFactoryIOSFactory类。

AbstactFactory 继承 WinFactory 和 IOSFactory 如下:

class IOSFacetory {
private:
    IOSRectButton *_rectbtn;
    IOSCircularButton *_circbtn;
public:
    IOSFacetory() : _rectbtn(NULL), _circbtn(NULL) {} // set rectbtn to null
    IOSRectButton* getIOSRectBtn () { 
        if(!_rectbtn) _rectbtn = new IOSRectButton;
        return _rectbtn;
    }

    IOSCircularButton* getIOSCircBtn() {
        if(!_circbtn) _circbtn = new IOSCircularButton;
        return _circbtn;
    }

    ~IOSFacetory() {
        if(_rectbtn) delete _rectbtn;
        if(_circbtn) delete _circbtn;
    }
};

class WinFacetory {
private:
    WinRectButton *_rectbtn;
    WinCircularButton *_circbtn;
public:
    WinFacetory() : _rectbtn(NULL), _circbtn(NULL) {} // set rectbtn to null
    WinRectButton* getWinRectBtn () { 
        if(!_rectbtn) _rectbtn = new WinRectButton;
        return _rectbtn;
    }

    WinCircularButton* getWinCircBtn() {
        if(!_circbtn) _circbtn = new WinCircularButton;
        return _circbtn;
    }

    ~WinFacetory() {
        if(_rectbtn) delete _rectbtn;
        if(_circbtn) delete _circbtn;
    }
};

class AbstractFactory : public WinFacetory, public IOSFacetory {
public:
    AbstractFactory(){}
}; 

main函数中,我试图将 a 设置IOSFactoryAbstractFactory指针:

#include "AbstractFactory.h"

int main() {
#ifdef _WIN
    AbstractFactory* factory = new WinFacetory;
#else 
    AbstractFactory* factory = new IOSFacetory;
#endif
    std::cin.get();
    return 0;
}

它不起作用,我收到以下编译错误:

IntelliSense: a value of type "IOSFacetory *" cannot be used to initialize an entity of type "AbstractFactory *.

我想我有一个小错误,但我无法弄清楚。我想得到帮助。谢谢!

4

2 回答 2

0

你应该WinFacetoryIOSFacetory. AbstractFactory现在你反其道而行之。

于 2013-06-20T06:52:16.700 回答
0

你应该颠倒你的继承关系。AbstractFactory 应该是 IOSFactory 和 WinFactory 的基类。

请记住在基类中声明一个虚拟析构函数。

于 2013-06-20T06:52:19.760 回答