나는 가상의 기본 클래스 인 Foo를 사용하여 다른 많은 클래스를 작게 파생 시켰습니다. 파생 된 클래스를 만들고 Foo *를 반환하는 팩토리가 있습니다. 내 큰 문제 중 하나는 내 과부하입니다. DFoo가 DFoo1에 의해 작동하지 않도록해야합니다 (표시되지 않음). 현재 캐스트가 실패했는지 확인하면서이 문제를 처리했지만, 나는 그 접근법에 꽤 만족하지 않습니다. 공장에서 기본 클래스 만 반환 할 수 있기 때문에 기본 구현을 사용해야합니다. 이것이 이것이 최선의 방법이라면, 괜찮습니다. 단지 이것이 의미가 있고 내가 놓친 패턴이 없다는 것을 확실히하고 싶습니다. 이런 종류의 일을 처리하는 방법에 대한 제안은 대단히 감사하겠습니다.상속 및 가상 기본 클래스가있는 할당 연산자
class Foo
{
public:
Foo(int x){...};
Bar m_bar;
virtual Foo& operator=(const Foo& f)
{
m_bar = f.m_bar
}
}
이제 내 파생 클래스
class DFoo : public Foo
{
DFoo(int x, int y):Foo(int x) {...}
FooBar m_foobar;
Foo& operator=(const Foo& rhs)
{
if(this != &rhs)
{
Foo::operator=(rhs);
DFoo temp = static_cast<DFoo>(rhs);
if(temp != NULL)
{
m_foobar = static_cast<DFoo>(rhs).m_foobar;
}
else
throw exception(ex);
}
}
}
사실, 클래스 계층 구조에 operator =()를 구현해야한다면, 제 디자인을 다시 한 번 살펴 보겠습니다. –
이 코드는 설명하는 것을 수행하지 않습니다. 나는 당신이 작성한 것 대신에'dynamic_cast'와'DFoo &'를 사용하고자한다고 생각합니다. –
'if (temp! = NULL)'은 무엇을하나요? temp는 포인터가 아니며 포인터 인 경우 참조에서 가져오고 NULL이 될 수 없습니다. – Potatoswatter