멤버 변수 A * my_hash를 가진 클래스 Base가 있다고 가정합니다. 또한 Base 클래스에서 상속받은 Extended 클래스도 있습니다. 또한 확장하는 클래스 B 이 A.C++ 디자인 질문
class Base{
Base(): my_hash(new A) {}
//methods which use my_hash
protected:
A* my_hash;
};
class Extended:public Base{
//methods which use my_hash from A
//I cannot have a B* my_other_hash in this class
//I would like to substitute B* my_hash
//I cannot let Base create my_hash (of type A*) because that is not what I want.
};
나는 제외하고 (즉, 그것은 상속 모두 사용) 보통을하고 한 가지 중요한 차이점으로, 나는 my_hash가 B로 원하는 확장 좋아할
* 대신 A *.
무언가가 Extended의 메소드 나 Base의 메소드를 통해 my_hash에 액세스 할 때마다 메소드를 B *로 실행하고 싶습니다.
시도해 볼 사항 : Extended에서 다시 정의하는 메소드 호출 (예 : Base())에서 create_hash()를 호출 할 수 없습니다. 해시를 만들 때 Extended 클래스로 돌아갈 수있는 방법이 없어 보이는 것처럼 작동하지 않습니다.
나는 B가 B에 대해 아는 것을 좋아하지 않을 것입니다. 어떻게해야합니까?
B는 A에서 파생 되었습니까? 또는 : A와 B가 관련이 있습니까? –
@Federico : 첫 번째 단락에 "나는 또한 A를 확장하는 클래스 B가 있습니다." –
아래 답변을 통해 클래스 A에 가상 메서드가 있는지 확인하여 클래스 A의 포인터를 통해 메서드를 호출하면 B의 메서드가 실행되도록합니다. – Jagannath