友元函數(shù)可以訪問私有成員,但受限制:只能訪問當(dāng)前類(不能訪問繼承類)的私有成員,且不能直接修改。實(shí)戰(zhàn)中,友元函數(shù)可通過引用或指針訪問私有成員,例如訪問 student 類的私有成員 name 并打印學(xué)生信息。
C++ 友元函數(shù)詳解:訪問私有成員的限制
什么是友元函數(shù)?
友元函數(shù)是不屬于任何類的函數(shù),但可以訪問該類中聲明的所有成員(包括私有成員)。友元函數(shù)允許不同類之間的密切交互,并實(shí)現(xiàn)封裝類的靈活使用。
友元函數(shù)訪問私有成員的限制
友元函數(shù)訪問私有成員時存在一些限制:
友元函數(shù)只能訪問當(dāng)前類的私有成員,不能訪問繼承類的私有成員。
友元函數(shù)不能直接修改私有成員。
實(shí)戰(zhàn)案例
假設(shè)我們有一個 Student
類,它有一個私有成員 name
和一個公有成員 getAge()
。我們創(chuàng)建一個友元函數(shù) printStudentInfo()
來訪問私有成員 name
并打印學(xué)生信息。
class Student { private: string name; public: int getAge(); // 聲明友元函數(shù) 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; }
登錄后復(fù)制
輸出:
Name: Jane Doe
登錄后復(fù)制
在這個示例中,友元函數(shù) printStudentInfo()
可以訪問私有成員 name
,但不能修改它。另外,需要注意的是,友元函數(shù)只能通過引用或指針訪問類的成員,不能直接使用對象成員。