den Beispielcode Gegeben:Sieht ein Freund Basisklassen?
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;
}
};
ein Freund alle Zugang geben Sie mir bedeutet es ich bekommen würde, als ob ich eine Member-Funktion innerhalb der Klasse war, an dem ich einen Freund? Mit anderen Worten, kann ich an die geschützten und öffentlichen Mitglieder der Basisklasse gelangen, die von mir privat geerbt wird, seit ich ein Freund bin?
Sehen, wie Sie sich die Mühe gemacht haben Beispiel-Code zu schreiben, haben Sie versucht, * es kompilieren *? Diese Art von Antwort würde sehr schnell in den Warnungen/Mangel an Licht kommen. – ssube
@peachykeen: Was Compiler akzeptieren und was der Standard sagt sind oft verschiedene Dinge. Außerdem könnte es theoretisch Feinheiten geben, die der Beispielcode nicht erfasst. –
@AdrianMcCarthy Das ist wahr. Viele Compiler warnen jedoch, wenn nicht standardmäßige Funktionen verwendet werden, und wenn es gegen den Standard und die Implementierung des Compilers verstößt, erhalten Sie eine kurze und süße Antwort. Obwohl es nicht narrensicher ist, kann es nicht schaden, es zu versuchen. – ssube