Heim >Backend-Entwicklung >C++ >Welchen Einfluss haben Friend-Funktionen auf die Klassenvererbung?

Welchen Einfluss haben Friend-Funktionen auf die Klassenvererbung?

PHPz
PHPzOriginal
2024-04-17 08:33:02834Durchsuche

Vererbung von Friend-Funktionen Wenn eine Unterklasse eine Klasse mit Friend-Funktionen erbt: Die Unterklasse kann die Friend-Funktion nicht erben. Freundfunktionen der übergeordneten Klasse können auf private Mitglieder der untergeordneten Klasse zugreifen. Freundfunktionen einer Unterklasse können nicht auf private Mitglieder der übergeordneten Klasse zugreifen.

Welchen Einfluss haben Friend-Funktionen auf die Klassenvererbung?

Der Einfluss von Friend-Funktionen auf die Klassenvererbung

Vorwort

Eine Friend-Funktion ist eine spezielle C++-Funktion, die auf private Mitglieder der Klasse außerhalb des Geltungsbereichs der Klasse zugreifen kann. Wenn es um die Klassenvererbung geht, ist es wichtig, das Verhalten von Friend-Funktionen zu verstehen.

Friend-Funktionen und Vererbung

Wenn eine Unterklasse eine Klasse mit Friend-Funktionen erbt, gelten die folgenden Regeln:

  • Unterklassen können keine Friend-Funktionen erben: Friend-Funktionen sind mit einer bestimmten Klasse verknüpft. Unterklassen können keine Friend-Funktionen von übergeordneten Klassen erben.
  • Friend-Funktionen einer übergeordneten Klasse können auf private Mitglieder der untergeordneten Klasse zugreifen: Wenn sich die übergeordnete Klasse und die untergeordnete Klasse kennen (d. h. die übergeordnete Klasse ist die Basisklasse der untergeordneten Klasse oder die untergeordnete Klasse ist eine abgeleitete Klasse der übergeordneten Klasse), dann können die Friend-Funktionen der übergeordneten Klasse einer Klasse auf private Mitglieder der Unterklasse zugreifen.
  • Friend-Funktionen einer Unterklasse können nicht auf die privaten Mitglieder der übergeordneten Klasse zugreifen: Im Gegensatz dazu kann eine Friend-Funktion einer Unterklasse nicht auf die privaten Mitglieder der übergeordneten Klasse zugreifen, selbst wenn die übergeordnete Klasse und die untergeordnete Klasse dies wissen gegenseitig.

Praktischer Fall

Betrachten Sie den folgenden Beispielcode:

#include <iostream>

class Base {
  friend void print(Base& b);  // 父类友元函数
private:
  int x;
};

class Derived : public Base {
  friend void access(Derived& d);  // 子类友元函数
private:
  int y;
};

void print(Base& b) { std::cout << b.x << std::endl; } // 父类友元函数访问私有成员 x

void access(Derived& d) { std::cout << d.x << " " << d.y << std::endl; } // 子类友元函数访问私有成员 x 和 y

int main() {
  Base b;
  b.x = 10;
  print(b);  // 输出:10

  Derived d;
  d.x = 20;
  d.y = 30;
  access(d);  // 输出:20 30
  print(d);  // 输出:20
}

In diesem Beispiel:

  • Die übergeordnete Klasse Base hat eine Freundfunktion print() , das Zugriff auf x private Mitglieder hat. Base 有一个友元函数 print(),它可以访问 x 私有成员。
  • 子类 Derived 有一个友元函数 access(),它可以访问父类私有成员 x
  • 子类 Derived 的对象 d 可以被父类 Base 友元函数 print() 访问,但是无法访问父类的私有成员 x
  • Die Unterklasse Derived verfügt über eine Friend-Funktion access(), die auf das private Mitglied der übergeordneten Klasse x zugreifen kann.
🎜Auf das Objekt d der Unterklasse Derived kann über die Friend-Funktion print() der übergeordneten Klasse Base zugegriffen werden , aber Zugriff auf das private Mitglied x der übergeordneten Klasse ist nicht möglich. 🎜🎜

Das obige ist der detaillierte Inhalt vonWelchen Einfluss haben Friend-Funktionen auf die Klassenvererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn