프로젝트에서 계층 구조 수준을 가진 그래프를 구현하는 클래스 계층 구조가 있습니다 (즉, 그래프 노드는 그래프 자체 일 수 있습니다 - 전자라고 생각할 수 있습니다 예를 들어, 게이트가 실제로 집적 칩일 수있는 회로). 따라서, 나는 Base
이 Group
및 Leaf
로 파생 된 클래스가 있고, 클래스 Base
내가 아닌 다른 곳에서, Group
의 주어진 방법 (아이를 추가 할 때)에서 설정할 수 있도록하고 싶습니다 속성 ancestor
을 가지고 있습니다 :특정 파생 클래스의 기본 클래스 멤버에 대한 액세스 허용
class Group;
class Base {
private: // or protected?
Group* ancestor;
};
class Group : public Base {
private:
void setAncestor(Base* child) {
// Something like
child->ancestor = this;
}
};
class Leaf : public Base {
// ...
};
"올바른"방법은 무엇입니까? 보통, 나는 friend
메쏘드를 사용할 것이지만,이 문맥에서는 불가능하다고 생각한다. 전에 선언해야만하는 Base
에 친구 Group::setAncestor
을 선언해야 할 것이기 때문이다. (이러한 선언은 실제 코드에서 다른 파일에 있습니다.)
이 ancestor'이 공개'하지 않으면 작동하지 않습니다. 'Group'은 자신의 * 기본 클래스의 protected 멤버에 접근 할 수 있습니다. 'Base '포인터를 통해 보호 된 멤버에 접근 할 수 없습니다.'Leaf '와 같은 무관 한 클래스의 기반이 될 수 있기 때문입니다. –
전체 친구 친구, 즉'친구 클래스 그룹 '을 만들 수 있습니다. – songyuanyao
전달 선언과'friend'를 사용할 수 있습니다. – Raito