友函数
在C++编程语言中,友函数(Friend Function)是一种特殊的函数,具有访问类中私有成员的权限,尽管它不是类的成员函数。友函数的存在使得类的设计更加灵活,能够在需要时授予外部函数访问类的私有成员的能力。本文将详细介绍C++中的友函数,包括其定义、使用场景、优缺点以及示例。
一、定义
友函数是在一个类中声明的一个非成员函数,但在类的内部声明该函数为友。这意味着该函数可以访问该类的私有成员,包括私有变量和私有函数。友函数的声明通常位于类的声明中,但其实现则位于类外部。
语法:
friend void friendFunction(const MyClass& obj);
案例:
#include <iostream> using namespace std; class MyClass {
private: int privateData; public: MyClass(int data) : privateData(data) {
} // 声明友函数 friend void friendFunction(const MyClass& obj); // Getter函数 int getPrivateData() const {
return privateData; } }; // 友函数实现 void friendFunction(const MyClass& obj) {
cout << "Friend function accessing private data: " << obj.privateData << endl; } int main() {
MyClass myObj(42); friendFunction(myObj); // 调用友函数 cout << "Private data accessed via getter: " << myObj.getPrivateData() << endl; return 0; }
如果需要将普通函数声明为某个类的友函数,只需要在该类中进行友声明即可,不管public或private中进行声明都可以。
语法:
friend class FriendClass;
案例:
#include <iostream> using namespace std; class MyClass; class FriendClass {
public: void accessPrivateData(const MyClass& obj); }; class MyClass {
private: int privateData; public: MyClass(int data) : privateData(data) {
} // 声明友类 friend class FriendClass; int getPrivateData() const {
return privateData; } }; // 友类成员函数实现 void FriendClass::accessPrivateData(const MyClass& obj) {
cout << "Friend class accessing private data: " << obj.privateData << endl; } int main() {
MyClass myObj(42); FriendClass friendObj; friendObj.accessPrivateData(myObj); // 调用友类的成员函数 return 0; }
语法:
friend int FriendMemberFunction(const MyClass& obj);
案例:
#include <iostream> using namespace std; class MyClass; // 声明友成员函数 int FriendMemberFunction(const MyClass& obj); class MyClass {
private: int privateData; public: MyClass(int data) : privateData(data) {
} // 声明友成员函数 friend int FriendMemberFunction(const MyClass& obj); int getPrivateData() const {
return privateData; } }; // 友成员函数实现 int FriendMemberFunction(const MyClass& obj) {
return obj.privateData; } int main() {
MyClass myObj(42); int data = FriendMemberFunction(myObj); // 调用友成员函数 cout << "Private data accessed via friend member function: " << data << endl; return 0; }
二、使用场景
1、访问私有成员:
主要作用是允许外部函数或类访问另一个类的私有成员,从而实现对类的细粒度控制。
2、操作符重载:
当需要重载类的操作符(如<<、>>、+、-等)时,友函数可以访问私有成员,实现合适的操作。
3、提高效率:
在某些情况下,使用友函数可以提高程序的执行效率,因为它可以直接访问类的私有成员,而不需要通过访问器函数(getter和setter)。
三、缺点
1、破坏封装性:
友函数可以突破类的封装性,使得类的私有成员可以被外部函数直接访问,可能会降低代码的安全性和可维护性。(友也破环了类的隐藏与封装,所以必须慎用 (牺牲安全,提高效率))
2、难以维护:
当程序变得复杂时,友函数的使用可能会导致代码变得难以理解和维护。
友不能 继承,交换,传递
今天的文章 C++——友(友函数、友类和友成员函数详解)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/84613.html