In C ist es möglich, Klassen als Freunde für andere Klassen zu definieren und privaten Mitgliedern unabhängig von der Kapselung Zugriff zu gewähren . Beim Umgang mit Klassenvorlagen ist es jedoch von entscheidender Bedeutung, die zugrunde liegenden Freundschaftsbeziehungen zu verstehen.
Betrachten Sie den Beispielcode:
template<class T> class BE { T *data; BE *l, *r; public: template<class U> friend class BT; }; template<class T> class BT { BE<T> *root; public: ... private: ... };
Dieser Code definiert eine Klasse BE, die Baumelemente darstellt, und eine Klasse BT, die diese darstellt ein binärer Baum. Ursprünglich wurde versucht, die Freundesklasse wie folgt zu deklarieren:
template<class T> friend class BT;
Dieser Ansatz schlug jedoch fehl. Um zu verstehen, warum, ist es wichtig zu erkennen, dass sich Vorlagenparameter nicht gegenseitig überschatten können. In verschachtelten Vorlagen muss jede Ebene eindeutige Vorlagenparameternamen haben.
Bedenken Sie im Gegensatz dazu diese Deklaration:
template<class T> class BE { template<class U> friend class BT<U>; };
Dies bedeutet, dass BT ein Freund von BE ist, unabhängig von den Vorlagenargumenten von BT. Jede Instanz von BT, unabhängig von der Art, die sie speichert, wird ein Freund von BE sein.
Alternativ, wenn die folgende Deklaration verwendet wird:
template<class T> class BE { friend class BT<T>; };
Dies bedeutet, dass BT nur ein ist Freund von BE, wenn das Vorlagenargument von BT mit dem von BE übereinstimmt. In diesem Fall ist beispielsweise BT
Im Fall des Binärbaumbeispiels wird die Freundklasse als Freundklasse BT
Das obige ist der detaillierte Inhalt vonWie können Sie Klassenvorlagen in C als Freunde deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!