>  기사  >  백엔드 개발  >  친구 함수는 클래스 상속에 어떤 영향을 미치나요?

친구 함수는 클래스 상속에 어떤 영향을 미치나요?

PHPz
PHPz원래의
2024-04-17 08:33:02800검색

친구 기능 상속 하위 클래스가 친구 기능이 있는 클래스를 상속하는 경우: 하위 클래스는 친구 기능을 상속받을 수 없습니다. 상위 클래스의 Friend 함수는 하위 클래스의 비공개 멤버에 액세스할 수 있습니다. 하위 클래스의 Friend 함수는 상위 클래스의 전용 멤버에 액세스할 수 없습니다.

친구 함수는 클래스 상속에 어떤 영향을 미치나요?

친구 함수가 클래스 상속에 미치는 영향

머리말

친구 함수는 클래스 범위 외부에서 클래스의 비공개 멤버에 액세스할 수 있는 특수 C++ 함수입니다. 클래스 상속에 관해서는 친구 함수의 동작을 이해하는 것이 중요합니다.

친구 함수 및 상속

하위 클래스가 친구 기능이 있는 클래스를 상속하는 경우 다음 규칙이 적용됩니다.

  • 하위 클래스는 친구 기능을 상속할 수 없습니다. 친구 기능은 연결된 특정 클래스와 관련됩니다. 하위 클래스는 상위 클래스의 친구 기능을 상속받을 수 없습니다.
  • 상위 클래스의 Friend 함수는 하위 클래스의 비공개 멤버에 액세스할 수 있습니다. 상위 클래스와 하위 클래스가 서로 알고 있는 경우(즉, 상위 클래스가 하위 클래스의 기본 클래스이거나 하위 클래스가 상위 클래스의 파생 클래스), 상위 클래스 클래스의 Friend 함수는 하위 클래스의 전용 멤버에 액세스할 수 있습니다.
  • 하위 클래스의 친구 함수는 상위 클래스의 비공개 멤버에 액세스할 수 없습니다. 반대로, 하위 클래스의 친구 함수 는 상위 클래스와 하위 클래스가 알고 있더라도 상위 클래스의 비공개 멤버에 액세스할 수 없습니다. 서로.

실용 사례

다음 샘플 코드를 고려하세요.

#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
}

이 예에서는:

  • 부모 클래스 Base에는 친구 함수 print()가 있습니다. , x 비공개 멤버에 액세스할 수 있습니다. Base 有一个友元函数 print(),它可以访问 x 私有成员。
  • 子类 Derived 有一个友元函数 access(),它可以访问父类私有成员 x
  • 子类 Derived 的对象 d 可以被父类 Base 友元函数 print() 访问,但是无法访问父类的私有成员 x
  • 하위 클래스 Derived에는 상위 클래스 전용 멤버 x에 액세스할 수 있는 친구 함수 access()가 있습니다.
🎜하위 클래스 Derived의 객체 d는 상위 클래스 Base 친구 함수 print()를 통해 액세스할 수 있습니다. , 그러나 상위 클래스의 비공개 멤버 x에 액세스할 수 없습니다. 🎜🎜

위 내용은 친구 함수는 클래스 상속에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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