首頁 >後端開發 >C++ >C++ 友元函數可以在類別外宣告嗎?

C++ 友元函數可以在類別外宣告嗎?

王林
王林原創
2024-04-16 15:42:011155瀏覽

在 C 中,友元函數可以宣告在類別外,但必須緊鄰類別的定義,用 friend 關鍵字開頭,不受類別作用域的限制。

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

C 友元函數可以在類別外宣告嗎?

前言
友元函數是在類別外存取類別私有/保護成員的特殊函數。它們在類別的定義之外聲明。本篇文章將討論 C 中友元函數的類別外宣告規則,並提供實戰案例進行說明。

類別外宣告規則
在C 中,友元函數可以宣告在類別的外部,但需要注意以下規則:

  1. 友元宣告必須緊鄰類別的定義:友元函數的宣告必須緊接著類別定義之後,以friend 關鍵字開頭。
  2. 友元與類別的作用域無關:友元函數的宣告不受類別作用域的限制,可以在類別的任何地方宣告。

實戰案例

下面是一個展示友元函數類別外宣告的實戰案例:

// 类 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 關鍵字。友元函數的宣告不受類別作用域的限制,從而提供了在類別外存取私有成員的靈活性。為了清晰和可讀性,建議在類別的定義附近聲明友元函數。

以上是C++ 友元函數可以在類別外宣告嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn