Open Pin-Jiun opened 1 year ago
假設今天有個Student class,但覺得Age是屬於隱私的狀態,想要進行存取但又保有隱私
class Student{ private: int Age; public: string Name; };
friend return_type f(class_Name); 使用friend修飾的function必須在class外實作
friend return_type f(class_Name);
class Student{ private: int Age; public: //declare friend function friend void PrintAge(Student); string Name; Student(string name, int age){ Name = name; Age = age; } }; //實作fiend function void PrintAge(Student someone){ cout << someone.Name << " is " << someone.Age << " year-old.\n"; } int main() { Student Amy("Amy",20); PrintAge(Amy); }
Amy is 20 year-old.
但是要注意不能濫用friend修飾詞,否則會失去friend的意義
friend class Teacher 宣告你要把private的相關資料分享給Teacher這個class 所以teacher可以取用其private member
friend class Teacher
class Student{ private: int Age; public: //declare friend class friend class Teacher; string Name; Student(string name, int age){ Name = name; Age = age; } }; class Teacher{ public: void PrintAge(Student someone){ cout << someone.Name << " is " << someone.Age << " year-old.\n"; } }; int main() { Student Amy("Amy",20); Teacher Bob; Bob.PrintAge(Amy); }
此時Bob這個Teacher class 可以取得 Amy 這個 Student class的 private/protected成員
如何取用private/protected member?
假設今天有個Student class,但覺得Age是屬於隱私的狀態,想要進行存取但又保有隱私
Friend functions
friend return_type f(class_Name);
使用friend修飾的function必須在class外實作但是要注意不能濫用friend修飾詞,否則會失去friend的意義
Friend classes
friend class Teacher
宣告你要把private的相關資料分享給Teacher這個class 所以teacher可以取用其private member此時Bob這個Teacher class 可以取得 Amy 這個 Student class的 private/protected成員