目录
- 标题: 友元函数和友元类
- 1. 友元函数
- 2. 友元类
标题: 友元函数和友元类
友元函数和友元类是C++中的概念,它们允许某些函数或类访问另一个类的私有成员。这样的访问权限超过了通常的私有和保护访问级别。请注意,友元类的使用应该谨慎,因为它破坏了封装性。过度使用友元可能导致代码的不稳定性和可维护性下降。
1. 友元函数
特点:
①不是类的成员函数,但能够访问类的私有成员。
②在类的声明中声明,但在类外部定义。
③使用关键字 friend 声明。
举例:
#include <iostream>
class MyClass
{private:int privateMember;public:MyClass(int value) : privateMember(value) {} //初始化参数列表// 友元函数的声明,使用friend 声明friend void friendFunction(const MyClass& obj);
};// 友元函数的定义。传的参数是:类的实例化对象。格式:const 类名&实例化的对象名
//这样的实例化对象可以直接访问类的私有成员
void friendFunction(const MyClass& obj) {std::cout << "Friend Function: " << obj.privateMember << std::endl;
}int main() {MyClass myObject(42);friendFunction(myObject); // 调用友元函数return 0;
}
2. 友元类
定义: 友元类是一个有权访问另一个类的私有和保护成员的类。
特点:
①一个类可以将另一个类声明为友元类,以便后者能够访问前者的私有和保护成员。
②友元关系是单向的。
举例:
#include <iostream>class FriendClass; // 前向声明class MyClass
{private:int privateMember; public:MyClass(int value) : privateMember(value) {} ///初始化参数列表// 友元类声明friend class FriendClass;
};class FriendClass
{public:// 友元类的成员函数,可以访问 MyClass 的私有成员void printPrivateMember(const MyClass& obj) {std::cout << "FriendClass accessing private member: " << obj.privateMember << std::endl;}
};int main() {MyClass myObject(42);FriendClass friendObj;friendObj.printPrivateMember(myObject); // FriendClass 访问 MyClass 的私有成员return 0;
}