Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah fungsi rakan C++ diisytiharkan di luar kelas?

Bolehkah fungsi rakan C++ diisytiharkan di luar kelas?

王林
王林asal
2024-04-16 15:42:011120semak imbas

Dalam C++, fungsi rakan boleh diisytiharkan di luar kelas, tetapi ia mesti bersebelahan dengan takrif kelas, bermula dengan kata kunci rakan, dan tidak dihadkan oleh skop kelas.

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

Bolehkah fungsi rakan C++ diisytiharkan di luar kelas?

Preface
Fungsi rakan ialah fungsi khas yang mengakses ahli peribadi/dilindungi kelas di luar kelas. Mereka diisytiharkan di luar definisi kelas. Artikel ini akan membincangkan peraturan pengisytiharan luar kelas untuk fungsi rakan dalam C++ dan menyediakan kes praktikal untuk digambarkan.

Peraturan pengisytiharan luar kelas
Dalam C++, fungsi rakan boleh diisytiharkan di luar kelas, tetapi anda perlu memberi perhatian kepada peraturan berikut:

  1. Pengisytiharan rakan mesti bersebelahan dengan takrif kelas: Pengisytiharan fungsi rakan mesti bersebelahan serta-merta Selepas definisi kelas, mulakan dengan kata kunci rakan.
  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;
}

代码解释
在这个例子中:

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

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

Rakan tiada kaitan dengan skop kelas: 🎜Pengisytiharan fungsi rakan tidak dihadkan oleh skop kelas dan boleh diisytiharkan di mana-mana sahaja dalam kelas. 🎜🎜Kes praktikal🎜🎜🎜Berikut ialah kes praktikal yang menunjukkan pengisytiharan luar kelas fungsi rakan:🎜rrreee🎜🎜Penjelasan kod🎜🎜Dalam contoh ini:🎜
    🎜 Definisi kelas Orang mengandungi pembolehubah ahli peribadi nama_. 🎜operator<< Fungsi diisytiharkan sebagai fungsi rakan kelas Orang dan diletakkan selepas takrifan kelas. 🎜Dalam fungsi utama, objek Orang dicipta dan nilai name_nya adalah output, yang memerlukan panggilan fungsi rakan. 🎜Fungsi rakan juga ditakrifkan di luar kelas Ia mengakses name_ pembolehubah ahli persendirian dan mengeluarkan nilainya.
🎜🎜Kesimpulan🎜🎜Fungsi rakan dalam C++ boleh diisytiharkan di luar kelas, tetapi mesti bersebelahan dengan takrif kelas dan menggunakan kata kunci rakan. Pengisytiharan fungsi rakan tidak dihadkan oleh skop kelas, sekali gus memberikan fleksibiliti untuk mengakses ahli persendirian di luar kelas. Untuk kejelasan dan kebolehbacaan, adalah disyorkan untuk mengisytiharkan fungsi rakan berhampiran definisi kelas. 🎜

Atas ialah kandungan terperinci Bolehkah fungsi rakan C++ diisytiharkan di luar kelas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn