友元函數是指某些雖然不是類成員卻能夠訪問類的所有成員的函數類授予它的友元函數特別的訪問權。
定義格式:friend <返回類型> <函數名> (<參數列表>);
- //friend.cc
- #include <iostream>
- #include <cstring>
- using namespace std;
-
-
- class Student
- {
- private:
- int no;
- char name[20];
- public:
- Student(int, const char*);
- friend void print(const Student&);
- friend ostream& operator<<(ostream&, const Student&);
- };
-
-
- Student::Student(int no, const char *name)
- {
- this->no = no;
- //name是一個char類型的數組,故不能直接用stu.name = "hahaya"進行賦值
- strcpy(this->name, name);
- }
-
-
- void print(const Student &stu)
- {
- cout << "學號:" << stu.no << "姓名:" << stu.name << endl;
- }
-
-
- ostream& operator<<(ostream &os, const Student &stu)
- {
- os << "學號:" << stu.no << "姓名:" << stu.name;
- return os;
- }
-
-
- int main()
- {
- Student stu(1, "hahaya");
-
-
- print(stu);
- cout << stu << endl;
-
-
- return 0;
- }
程序運行結果:
在friend.cc中定義了兩個友元函數,從這兩個函數中不難發現:一個類的友元函數可以訪問該類的私有成員。其中重載的"<<"操作符必須定義為友元函數,因為輸出流os對象會調用Student類中的私有成員。如果不定義為友元函數,則類外對象不能調用該類的私有成員。