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