클래스 A는 클래스 B 인스턴스의 컨테이너입니다.클래스 A에서 친구로 선언 된 함수가 클래스 B에서 공용 함수로 정의되어야하는 이유는 무엇입니까?
파일 아 :
#include "B.h"
Class A
{ public:
unique_ptr<B> getInstanceOfB();
private:
unique_ptr<map<int, shared_ptr<B>>> uptr_BInstancesMap;
map<string, int> map__BUniqueValues;
friend int B::getValueIndex(const string);
};
파일 BH :
이Class B
{ public:
unique_ptr<B> returnInstanceOfB();
// int getValueIndex(const string); // Compiles fine
private:
int int__ValueIndex;
int getValueIndex(const string); // "error: 'int B::getValueIndex(std::string)' is private"
}
(A)의 인스턴스에 저장된 B 10 만 개 인스턴스의 위쪽이있을 수 있지만,로 표현 훨씬 적은 수의 고유 값이있을 것 B의 인스턴스 B. 그래서 A의 인스턴스에 고유 한 값을 저장하고 인덱스를 B의 각 인스턴스에서 (공유) 값에 저장하는 것이 좋습니다. 친구 기능에 대해 합리적인 시나리오처럼 보입니다.
getValueIndex()는 내에서 범위 내에서 사용됩니다. 공개되어서는 안됩니다. friend 함수 정의가 개인용이 될 수없는 이유를 설명하는 사람 (위험한 예가있을 수 있음)이 있습니까?
@ 마크 랜섬 : 잘못된 표현. "클래스 A는 클래스 B의 컨테이너입니다"가 더 정확합니까? – pbyhistorian
훨씬 좋습니다. 내 의견을 지금 삭제하겠습니다. –
클래스 A에서'friend int B :: getValueIndex (const string);을 선언하면 클래스 A의 개인/보호 된 멤버에 액세스 할 수있게됩니다. – Dmitri