C++——友元(友元函数、友元类和友元成员函数详解)

C++——友元(友元函数、友元类和友元成员函数详解)友函数是在一个类中声明的一个非成员函数 但在类的内部声明该函数为友

友函数

在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; } 

如果需要将普通函数声明为某个类的友函数,只需要在该类中进行友声明即可,不管publicprivate中进行声明都可以。

语法:

 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++——友(友函数、友类和友成员函数详解)分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-12 07:46
下一篇 2024-12-12 07:40

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/84613.html