友元函數(shù)允許跨類訪問私有或受保護(hù)成員,語(yǔ)法為:class classname {protected: // 私有或受保護(hù)成員};friend 聲明友元函數(shù);。要調(diào)用友元函數(shù),使用點(diǎn)運(yùn)算符和類實(shí)例:obj.value = 10; printvalue(obj);。實(shí)戰(zhàn)案例中,友元函數(shù)用于比較兩個(gè)字符串長(zhǎng)度,訪問了私有成員 length()。
C++ 友元函數(shù)詳解:深入理解和調(diào)用方式
友元函數(shù)是 C++ 中一種特殊類型的函數(shù),它可以訪問另一個(gè)類的私有和受保護(hù)成員。這在需要跨類訪問數(shù)據(jù)或?qū)崿F(xiàn)特殊功能時(shí)非常有用。
友元函數(shù)的語(yǔ)法
友元函數(shù)的語(yǔ)法如下:
class ClassName {
protected:
// 私有或受保護(hù)成員
};
friend 聲明友元函數(shù);
登錄后復(fù)制
例如:
class MyClass {
protected:
int value;
};
friend void printValue(MyClass&); // 聲明友元函數(shù)
登錄后復(fù)制
調(diào)用友元函數(shù)
要調(diào)用友元函數(shù),可以使用點(diǎn)運(yùn)算符(.)和類實(shí)例:
MyClass obj; obj.value = 10; // 訪問私有成員 printValue(obj); // 調(diào)用友元函數(shù)
登錄后復(fù)制
實(shí)戰(zhàn)案例
以下是一個(gè)使用友元函數(shù)的實(shí)戰(zhàn)案例:
// 友元函數(shù)用于比較兩個(gè)字符串的長(zhǎng)度
bool compareStringLength(const string& s1, const string& s2) {
return s1.length() > s2.length();
}
// 測(cè)試友元函數(shù)
int main() {
string str1 = "Hello";
string str2 = "World";
// 使用友元函數(shù)比較字符串長(zhǎng)度
if (compareStringLength(str1, str2)) {
cout << "str1 is longer than str2" << endl;
} else {
cout << "str2 is longer than str1" << endl;
}
return 0;
}
登錄后復(fù)制
在這個(gè)例子中,compareStringLength 函數(shù)是一個(gè)友元函數(shù),可以訪問 string 類的私有成員 length()。






