>  기사  >  백엔드 개발  >  C++ 친구 함수에 대한 자세한 설명: 클래스 간 액세스를 위해 친구 함수를 사용하는 방법은 무엇입니까?

C++ 친구 함수에 대한 자세한 설명: 클래스 간 액세스를 위해 친구 함수를 사용하는 방법은 무엇입니까?

王林
王林원래의
2024-04-29 18:51:011148검색

C++의 Friends 함수를 사용하면 비멤버 함수가 클래스의 비공개 및 보호 멤버에 액세스할 수 있습니다. 이는 클래스 간 작업, ADT 및 단위 테스트를 구현하는 데 매우 유용합니다. friend 함수 선언: friend 키워드를 사용하여 클래스 외부에서 함수를 선언합니다. 수업. 친구 함수 사용: 마치 멤버 함수인 것처럼 클래스의 전용 멤버에 직접 액세스합니다. 실제 사례: 친구 기능을 사용하여 연령 속성을 노출하지 않고 개인 연령 정보를 얻습니다.

C++ 友元函数详解:如何使用友元函数进行跨类访问?

C++ 프렌드 함수에 대한 자세한 설명: 클래스 간 액세스를 현실로 만들기

C++ 프로그래밍에서 프렌드 함수는 클래스 외부의 함수가 클래스의 비공개 및 보호 멤버에 액세스할 수 있도록 하는 강력한 메커니즘입니다. 이는 다음과 같은 특정 상황에서 매우 유용합니다.

  • 특정 클래스 속성에 대해 작동하는 비멤버 함수 구현.
  • 클래스 전반에 걸쳐 ADT(추상 데이터 유형)를 구현합니다.
  • 단위 테스트 프레임워크에서는 친구 기능을 사용하여 액세스 제한을 우회하여 비공개 메서드를 테스트합니다.

친구 함수 선언

class MyClass {
public:
    // ...
private:
    // ...
    friend void print_my_class(const MyClass&); // 声明友元函数
};

위 코드에서는 print_my_classMyClass의 친구 함수로 선언합니다. 이는 print_my_class 함수가 MyClass의 비공개 및 보호 멤버에 액세스할 수 있음을 의미합니다. print_my_class 作为 MyClass 的友元函数。这意味着 print_my_class 函数可以访问 MyClass 的私有和受保护成员。

友元函数的使用

要使用友元函数,只需在友元函数中直接访问类的私有成员即可:

void print_my_class(const MyClass& obj) {
    std::cout << "Private member: " << obj.private_member << std::endl;
    std::cout << "Protected member: " << obj.protected_member << std::endl;
}

实战案例

假设我们有一个 Person 类,表示一个人,它具有一个私有的 age 成员。我们想要创建一个友元函数 get_age 来获取 Person 对象的年龄:

class Person {
public:
    // ...
private:
    int age;
    friend int get_age(const Person&); // 声明友元函数
};

int get_age(const Person& person) {
    return person.age;
}

main 函数中,我们创建一个 Person 对象并使用友元函数 get_age

친구 함수 사용

친구 함수를 사용하려면 친구 함수에서 직접 클래스의 비공개 멤버에 액세스하세요. 🎜
int main() {
    Person person(25);
    std::cout << "Age: " << get_age(person) << std::endl;
    return 0;
}
🎜실제 사례🎜🎜다음을 나타내는 Person A 클래스가 있다고 가정합니다. 사람이고 비공개 age 멤버가 있습니다. Person 개체의 나이를 가져오기 위해 친구 함수 get_age를 만들고 싶습니다. 🎜
Age: 25
🎜 main 함수에서 Person 객체를 사용하고 친구 함수 get_age를 사용하여 해당 비공개 멤버에 액세스합니다. 🎜rrreee🎜출력: 🎜rrreee

위 내용은 C++ 친구 함수에 대한 자세한 설명: 클래스 간 액세스를 위해 친구 함수를 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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