A, B 및 C라는 세 클래스가 있습니다. B는 A에서 상속 받고 C는 B에서 상속받습니다 (A -> B -> C).적절한 상속 디자인
또한 IBinary라는 추상 기본 클래스가 있습니다. 모든 클래스가 IBinary 인터페이스를 구현하도록하고 싶습니다. 클래스 A가 IBinary에서 상속 받도록 만들면 코드 출력은 C::readb
이됩니다. 클래스 A가 IBinary를 상속하지 않으면 출력은 B:readb
입니다.
내 세 클래스를 동일한 인터페이스에 가입시키는 올바른 방법은 무엇입니까? 최상위 클래스 (A) 만 인터페이스 클래스에서 상속받는 경우 위 코드와 같은 해결 문제가 발생하지 않도록 코드를 리팩토링해야합니다.
명시 적으로 모든 클래스가 인터페이스 클래스에서 상속 받으면 나는 더 복잡한 클래스 계층 구조를 갖게되고 죽음의 다이아몬드에 가깝게됩니다.
#include <iostream>
class IBinary {
public:
virtual void readb(std::istream& in) = 0;
};
// Basic A -- change whether this inherits from IBinary
class A : public IBinary {
public:
A() {};
void readb(std::istream& in) {}
};
// Specialized A
class B : public A {
public:
B() {};
void load() {
this->readb(std::cin); // <-- which readb is called?
}
void readb(std::istream& in) {
std::cout << "B::readb" << std::endl;
}
};
// Specialized B
class C : public B {
public:
C() {};
void readb(std::istream& in) {
std::cout << "C::readb" << std::endl;
}
void foo() {
B::load();
}
};
int main() {
C c;
c.foo();
}
나는이 문제를 이해하지 못한다. *'c.foo'가 원하는 것은 무엇입니까? –
클래스가 인터페이스에 가입한다는 것은 무엇을 의미합니까? – Casey
@Casey 구현하기 위해 구독을 사용하고 있습니다. 구현이 더 확실해 보입니다. – Derek