成員函數是定義在類中的函數,它可以訪問類中的成員變量和其他成員函數。成員函數使用類的對象來調用,并且隱式地訪問該對象的成員。
友元函數是在類外部定義的函數,它可以訪問類的私有成員。友元函數可以在類中聲明為友元,或者在類外部聲明為友元。
下面是成員函數和友元函數的使用示例:
#include <iostream>
class MyClass {
private:
int x;
public:
MyClass(int num) : x(num) {}
// 成員函數
void printX() {
std::cout << "x 的值為:" << x << std::endl;
}
// 友元函數聲明
friend void modifyX(MyClass& obj, int num);
};
// 友元函數定義
void modifyX(MyClass& obj, int num) {
obj.x = num;
}
int main() {
MyClass obj(5);
obj.printX(); // 輸出:x 的值為:5
modifyX(obj, 10);
obj.printX(); // 輸出:x 的值為:10
return 0;
}
在上面的示例中,MyClass
類有一個私有成員變量 x
和一個成員函數 printX()
。printX()
函數內部可以訪問 x
的值。
modifyX()
是一個友元函數,可以訪問 MyClass
類的私有成員變量 x
。在 main()
函數中,首先調用 printX()
輸出 x
的初始值 5,然后調用 modifyX()
修改 x
的值為 10,并再次調用 printX()
輸出修改后的值。
注意,友元函數可以直接訪問私有成員變量,但它不是類的成員函數,因此不能使用類的對象來調用。在示例中,我們直接傳遞了 obj
對象作為參數給 modifyX()
函數進行調用。