C++ Friend 和 This 教學
Friend
你沒有朋友(我也沒有)
Friend Function 介紹
我們不能從該Class的外部access該Class的private members。
但是,如果將non member function聲明為class的friend
,我們就可以使其access該class的private member。
這是通過在Class中包含此外部function的聲明並在其前面加上關鍵字friend
來實現的。
Syntax :
1 | friend return_type function_name(parameters); |
Friend Function(Pass by Reference)
1 | class MyClass { |
請注意,將Object傳遞給function時,我們需要使用
&
運算符通過reference將其傳遞(Pass by reference)。因此,我們可以使用實際對象,而不是對象的copy(副本)。 如果不用&
的話,我們是Pass by value(通過值傳遞),創建對象的副本。
Friend Function(Pass by value)
如果用 Pass by value呢?
1 |
|
friend
的用法就是在兩個不同Class之間進行的操作,它們訪問兩者的private member。
而且您可以在任意多個Class中聲明一個friend function。
實例:
1 |
|
Friend Class
您可以定義一個friend class,讓這個friend class access其他class的private member。當一個class成為friend class時,該class的所有member functions都將成為friend functions。
在此示例中,我們有兩個Class - XYZ
和ABC
。 XYZ
Class具有兩個private member ch
和num
,該類將ABC
聲明為friend class。 這意味著ABC
可以訪問XYZ
的private member ,在ABC
class的function disp()
access private member num
和ch
的示例中已經證明了這一點。
在此示例中,我們是用Pass by value。
1 |
|
This
C++中的每個Object都可以通過稱為this
pointer來訪問其自己的address(地址)。
在member function中,this
指 refer to the invoking object。
friend function沒有this pointer,因為friends不是class的member。
1 | class MyClass { |
注意,只有member function具有this指針。
this
關鍵字在operator overloading中有著重要的作用(其實不太重要)。
Reference
C++ friend Function and friend Classes
Friend Class and Friend Functions in C++