友元函數可以訪問私有成員,但受限制:只能訪問當前類(不能訪問繼承類)的私有成員,且不能直接修改。實戰中,友元函數可通過引用或指針訪問私有成員,例如訪問 student 類的私有成員 name 并打印學生信息。
C++ 友元函數詳解:訪問私有成員的限制
什么是友元函數?
友元函數是不屬于任何類的函數,但可以訪問該類中聲明的所有成員(包括私有成員)。友元函數允許不同類之間的密切交互,并實現封裝類的靈活使用。
友元函數訪問私有成員的限制
友元函數訪問私有成員時存在一些限制:
友元函數只能訪問當前類的私有成員,不能訪問繼承類的私有成員。
友元函數不能直接修改私有成員。
實戰案例
假設我們有一個 Student
類,它有一個私有成員 name
和一個公有成員 getAge()
。我們創建一個友元函數 printStudentInfo()
來訪問私有成員 name
并打印學生信息。
class Student { private: string name; public: int getAge(); // 聲明友元函數 friend void printStudentInfo(const Student& student); }; void printStudentInfo(const Student& student) { // 可以訪問私有成員 cout << "Name: " << student.name << endl; // 不能修改私有成員 // student.name = "John Doe"; // 錯誤 } int main() { Student student1; student1.setName("Jane Doe"); printStudentInfo(student1); return 0; }
登錄后復制
輸出:
Name: Jane Doe
登錄后復制
在這個示例中,友元函數 printStudentInfo()
可以訪問私有成員 name
,但不能修改它。另外,需要注意的是,友元函數只能通過引用或指針訪問類的成員,不能直接使用對象成員。