두 클래스가 추상 클래스에서 파생 된 다른 클래스에 대한 참조를 사용하는 멤버 함수로 클래스를 만들고 싶습니다. addElem()을 구현하지 않기 때문에 클래스 Container가 추상이라는 컴파일러 오류가 발생합니다.C++ 추상 클래스는 파생 클래스 매개 변수를 가져옵니다.
class Ielem
{
public:
virtual void action() = 0;
};
class Elem: public Ielem
{
public:
void action() {};
void extra() {};
};
class Icontainer
{
public:
virtual void addElem(Ielem &elem) = 0;
};
class Container: public Icontainer
{
public:
void addElem(Elem &elem) { elem.extra(); };
};
int main(int argc, char* argv[])
{
Elem e;
Container c;
c.addElem(e);
return 0;
}
Elem에 대한 참조는 Ielem을 참조하기 때문에 작동해야합니다. Container :: addElem을 Ielem에 대한 참조로 만들면 컴파일됩니다. 하지만 Container :: addElem()은 dynamic_cast를 사용하지 않는 한 Elem :: extra()를 호출 할 수 없습니다. 사용하고있는 내장 컴파일러에서는 사용할 수 없으며 유형이 안전하지 않은 일반 캐스트는 사용할 수 없습니다.
제안 사항?
와 중간 추상 클래스를 만들 수 있으며,이 것 아마 그들 중 하나가 아닙니다. – Wug
기본 클래스에 순수한'extra()'를 추가하지 않는 이유는 무엇입니까? – jrok
제 실제 코드에서'extra()'는'Elem' 클래스의 특성과 관련이 있습니다. 다른 Ielem 구현에서는 의미가 없기 때문에 기본 클래스에 추가하여 구현하지 않아도됩니다. –