>  기사  >  백엔드 개발  >  C++ 친구 함수를 클래스 외부에서 선언할 수 있나요?

C++ 친구 함수를 클래스 외부에서 선언할 수 있나요?

王林
王林원래의
2024-04-16 15:42:011120검색

C++에서 친구 함수는 클래스 외부에서 선언할 수 있지만 클래스 정의 바로 옆에 있어야 하고, 친구 키워드로 시작해야 하며, 클래스 범위에 의해 제한되지 않아야 합니다.

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

C++ 친구 함수를 클래스 외부에서 선언할 수 있나요?

머리말
Friend 함수는 클래스 외부 클래스의 비공개/보호 멤버에 액세스하는 특수 함수입니다. 클래스 정의 외부에서 선언됩니다. 이 기사에서는 C++의 friend 함수에 대한 클래스 외부 선언 규칙을 논의하고 설명할 실제 사례를 제공합니다.

외부 클래스 선언 규칙
C++에서는 friend 함수를 클래스 외부에서 선언할 수 있지만 다음 규칙에 주의해야 합니다.

  1. Friend 선언은 클래스 정의 바로 옆에 있어야 합니다. Friend 함수 선언은 바로 인접해야 합니다. 클래스 정의 다음에는 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;
}

代码解释
在这个例子中:

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

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

친구는 클래스 범위와 아무 관련이 없습니다. 🎜친구 함수 선언은 클래스 범위에 의해 제한되지 않으며 클래스 내 어디에서나 선언할 수 있습니다. 🎜🎜실용 사례🎜🎜🎜다음은 친구 함수의 클래스 외부 선언을 보여주는 실제 사례입니다.🎜rrreee🎜🎜코드 설명🎜🎜이 예에서는:🎜
    🎜 Person 클래스 정의에는 전용 멤버 변수 name_이 포함되어 있습니다. 🎜operator<< 함수는 Person 클래스의 friend 함수로 선언되고 클래스 정의 뒤에 배치됩니다. 🎜메인 함수에서는 Person 객체가 생성되고 name_ 값이 출력됩니다. 이를 위해서는 친구 함수 호출이 필요합니다. 🎜Friend 함수는 클래스 외부에서도 정의됩니다. name_ 비공개 멤버 변수에 액세스하여 해당 값을 출력합니다.
🎜🎜결론🎜🎜C++의 Friend 함수는 클래스 외부에서 선언할 수 있지만 클래스 정의 바로 옆에 있어야 하며 friend 키워드를 사용해야 합니다. friend 함수의 선언은 클래스 범위에 의해 제한되지 않으므로 클래스 외부의 전용 멤버에 액세스할 수 있는 유연성을 제공합니다. 명확성과 가독성을 위해 클래스 정의 근처에 친구 함수를 선언하는 것이 좋습니다. 🎜

위 내용은 C++ 친구 함수를 클래스 외부에서 선언할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.