Heim > Backend-Entwicklung > C++ > Können C++-Friend-Funktionen außerhalb einer Klasse deklariert werden?

Können C++-Friend-Funktionen außerhalb einer Klasse deklariert werden?

王林
Freigeben: 2024-04-16 15:42:01
Original
1176 Leute haben es durchsucht

In C++ können Friend-Funktionen außerhalb der Klasse deklariert werden, sie müssen jedoch unmittelbar an die Definition der Klasse angrenzen, mit dem Schlüsselwort Friend beginnen und sind nicht durch den Klassenbereich eingeschränkt.

C++ 友元函数可以在类外声明吗?

Können C++-Friend-Funktionen außerhalb einer Klasse deklariert werden?

Vorwort
Friend-Funktionen sind spezielle Funktionen, die auf private/geschützte Mitglieder einer Klasse außerhalb der Klasse zugreifen. Sie werden außerhalb der Klassendefinition deklariert. In diesem Artikel werden die Deklarationsregeln außerhalb der Klasse für Friend-Funktionen in C++ erläutert und praktische Beispiele zur Veranschaulichung bereitgestellt.

Deklarationsregeln außerhalb der Klasse
In C++ können Friend-Funktionen außerhalb der Klasse deklariert werden, Sie müssen jedoch die folgenden Regeln beachten:

  1. Friend-Deklaration muss unmittelbar neben der Definition der Klasse stehen: Friend-Funktionsdeklaration muss unmittelbar benachbart sein. Beginnen Sie nach der Klassendefinition mit dem Schlüsselwort friend.
  2. friend 关键字开头。
  3. 友元与类的作用域无关:友元函数的声明不受类作用域的限制,可以在类的任何地方声明。

实战案例

下面是一个展示友元函数类外声明的实战案例:

// 类 Person 定义
class Person {
private:
  std::string name_; // 私有成员变量

public:
  Person(const std::string& name) : name_(name) {}
};

// 友元函数声明(在 Person 类外)
friend std::ostream& operator<<(std::ostream& os, const Person& person);

// 主函数
int main() {
  Person p("John Doe");
  std::cout << p << std::endl; // 调用友元函数
}

// 友元函数定义(在 Person 类外)
std::ostream& operator<<(std::ostream& os, const Person& person) {
  os << person.name_;
  return os;
}
Nach dem Login kopieren

代码解释
在这个例子中:

  • Person 类定义包含一个私有成员变量 name_
  • operator<< 函数声明为 Person 类的友元函数,并置于类的定义之后。
  • 在主函数中,创建了一个 Person 对象并输出其 name_ 值,这需要调用友元函数。
  • 友元函数的定义也在类的外部进行,它访问 name_ 私有成员变量并输出它的值。

结论
C++ 中的友元函数可以在类的外部声明,但必须紧邻类的定义并使用 friend

Freunde haben nichts mit dem Umfang der Klasse zu tun: 🎜Die Deklaration von Freundfunktionen ist nicht durch den Klassenumfang eingeschränkt und kann an einer beliebigen Stelle in der Klasse deklariert werden. 🎜🎜Praktischer Fall🎜🎜🎜Das Folgende ist ein praktischer Fall, der die Out-of-Class-Deklaration einer Freundfunktion zeigt:🎜rrreee🎜🎜Code-Erklärung🎜🎜In diesem Beispiel:🎜
    🎜 Die Klassendefinition Person enthält eine private Mitgliedsvariable name_. 🎜operator<< Die Funktion wird als Friend-Funktion der Klasse Person deklariert und nach der Definition der Klasse platziert. 🎜In der Hauptfunktion wird ein Person-Objekt erstellt und sein name_-Wert ausgegeben, was den Aufruf der Friend-Funktion erfordert. 🎜Friend-Funktion wird auch außerhalb der Klasse definiert. Sie greift auf die private Mitgliedsvariable name_ zu und gibt ihren Wert aus.
🎜🎜Fazit🎜🎜Friend-Funktionen in C++ können außerhalb einer Klasse deklariert werden, sie müssen jedoch unmittelbar an die Klassendefinition angrenzen und das Schlüsselwort friend verwenden. Die Deklaration einer Friend-Funktion ist nicht durch den Klassenbereich eingeschränkt und bietet somit die Flexibilität, auf private Mitglieder außerhalb der Klasse zuzugreifen. Aus Gründen der Klarheit und Lesbarkeit wird empfohlen, Friend-Funktionen in der Nähe der Definition der Klasse zu deklarieren. 🎜

Das obige ist der detaillierte Inhalt vonKönnen C++-Friend-Funktionen außerhalb einer Klasse deklariert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage