나는 AbstractFactory
, WinFactory
및 IOSFactory
클래스를 가지고 있습니다. 다음과 같이파생 클래스를 기본 클래스 포인터에 할당하지 못합니까?
AbstactFactory inheritences WinFactory 및 IOSFactory :
#include "AbstractFactory.h"
int main() {
#ifdef _WIN
AbstractFactory* factory = new WinFacetory;
#else
AbstractFactory* factory = new IOSFacetory;
#endif
std::cin.get();
return 0;
}
것은 그것은 작동하지 않습니다 다음 main
기능에
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(){}
};
, 나는 AbstractFactory
포인터로 IOSFactory
을 설정하기 위해 노력하고있어 다음과 같은 컴파일 오류가 발생합니다.
IntelliSense: a value of type "IOSFacetory *" cannot be used to initialize an entity of type "AbstractFactory *
.
나는 사소한 오류가 있다고 생각하지만 나는 그것을 이해할 수 없다. 나는 도움을 받고 싶다. 감사!
'AbstractFacetory'는 'IOSFacetory'입니다. 그 반대는 사실이 아닙니다. 파생 클래스 1에 기본 클래스 포인터를 할당하려고합니다. – juanchopanza
참고 : 유출, 유출, 유출 ... 'std :: unique_ptr'을 조사하고 VC++에서 지원해야합니다. –