在 c++++ 中,友元函數(shù)可以訪問類的私有成員,而無需成為該類的成員函數(shù)。在模板類中,友元函數(shù)的聲明與普通類中的聲明類似,且必須在類的定義外部進(jìn)行聲明。例如,要在模板類 myclass 中聲明友元函數(shù) printvalue,需要使用 friend 關(guān)鍵字在類定義外部聲明該函數(shù)。友元函數(shù)只能訪問聲明它為友元的類的成員。
C++ 友元函數(shù)詳解:在模板類中的使用
簡介
友元函數(shù)是一種在 C++ 中特殊類型的函數(shù),它被允許訪問某個(gè)類的私有成員,而無需成為該類的成員函數(shù)。在某些情況下,友元函數(shù)非常有用,例如當(dāng)需要跨越類邊界共享數(shù)據(jù)或功能時(shí)。
模板類中的友元函數(shù)
在模板類中聲明友元函數(shù)與在普通類中非常相似。以下示例展示了如何在模板類 MyClass
中聲明友元函數(shù) printValue
:
template <typename T> class MyClass { public: T value; friend void printValue(const MyClass<T>& obj) { std::cout << "Value: " << obj.value << std::endl; } };
登錄后復(fù)制
使用友元函數(shù)
要使用友元函數(shù),必須在類的定義外部聲明該函數(shù)??梢允褂?friend
關(guān)鍵字來指定友元函數(shù),如下所示:
template <typename T> void printValue(const MyClass<T>& obj);
登錄后復(fù)制
實(shí)戰(zhàn)案例
假設(shè)我們有一個(gè) Node
模板類,其中包含私有數(shù)據(jù)成員 value
,并想要聲明一個(gè)友元函數(shù) display
來顯示節(jié)點(diǎn)的值。
template <typename T> class Node { public: T value; friend void display(const Node<T>& node) { std::cout << "Node Value: " << node.value << std::endl; } };
登錄后復(fù)制
在編寫友元函數(shù)時(shí),需要注意以下幾點(diǎn):
函數(shù)必須在類的定義外部聲明。
函數(shù)原型不能有 const
或 virtual
修飾符。
函數(shù)只能訪問聲明它為友元的類的成員。