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