Biorąc przykładowy kod:Czy znajomy widzi klasy bazowe?
class Base {
public:
bool pub;
protected:
bool prot;
};
class Derived : private Base {
friend class MyFriend;
};
class MyFriend {
Derived _derived;
void test() {
// Does standard provide me access to _derived.pub and _derived.prot?
cout << "Am I allowed access to this: " << _derived.pub
<< " and this: " << _derived.prot;
}
};
Czy bycie przyjacielem dać mi wszystko chciałbym uzyskać dostęp jakbym był członkiem funkcji w klasie, do której jestem przyjaciela? Innymi słowy, czy mogę dostać się do chronionych i publicznych członków klasy bazowej, która jest prywatnie dziedziczona, odkąd jestem przyjacielem?
skoro już poszedł sobie trud, aby napisać przykładowy kod, próbowałeś go * * kompilacji? Ten rodzaj odpowiedzi szybko wyjdzie na jaw w ostrzeżeniach/brakach. – ssube
@peachykeen: Jakie kompilatory akceptują i co standard mówi, to często różne rzeczy. Ponadto, teoretycznie mogą istnieć subtelności, których nie obejmuje próbny kod. –
@AdrianMcCarthy To prawda. Jednak wiele kompilatorów będzie ostrzegać, gdy będą używane niestandardowe funkcje, a jeśli będzie to niezgodne ze standardem i implementacją kompilatora, otrzymasz krótką i słodką odpowiedź. Chociaż nie jest to niezawodne, nie może zaszkodzić spróbować. – ssube