一、友元函式
1.友元函式概述:
(1)友元函式是定義在乙個類外的普通函式。
友元函式和普通函式的定義一樣;在類內必須將該普通函式宣告為友元。
(2)友元函式不是成員函式。
不能通過物件來呼叫,而是直接呼叫;友元函式可以訪問類的公有、受保護以及私有成員,但是必須通過物件、物件指標或者物件引用來訪問。
2.友元函式的宣告:
friend 返回值型別 函式名(參數列);
在類中只需要將這個宣告放置在公有部分即可。?1
2345
6789
1011
12class
point
point(
double
xx,
double
yy)
friend
double
distance(point, point);
//將distance函式宣告為友元函式
};
double
distance(point my1, point my2)
3.友元函式在定義時即普通函式的定義,前面不加friend,在類內宣告時,必須加friend.
在友元函式生效的物件的作用範圍內可以訪問私有、公有以及受保護成員。
main函式不能宣告為類的友元函式,main函式只能做主調不能做被調。
二、拷貝建構函式:
1.拷貝建構函式概述:
(1)拷貝建構函式是乙個建構函式,它屬於類的成員函式(普遍定義為public);和類名同名但是無返回值;建立物件時,若該物件的初始化值是另乙個同類物件時(賦值不呼叫)呼叫。
(2)拷貝建構函式的宣告
類名::類名(類名 &物件引用名); 或另一種宣告方式
類名::類名(const 類名 &物件引用名)
注意:拷貝建構函式只有乙個引數,而且引數必須是乙個物件的引用;每個類其實都要有乙個拷貝建構函式,若沒有顯式的定義,那麼系統會自動定義並且設定其屬性為公有。
2.示例程式:?1
2345
6789
1011
1213
1415
1617
18class
point
point(
int
xx,
int
yy)
point(point &pf)
//拷貝建構函式的宣告可以省略第乙個類名和::
};
point(point &pf)
int
main()
注意:如果沒有使用const修飾,那麼出現pf.x=8這種語句是合法的,但是加了const之後是非法的。另外,引用完pf也會釋放。
友元函式與友元類 友元與巢狀
友元提供了不同類的成員函式之間 類的成員函式與一般函式之間進行資料共享的機制。通過友元,乙個不同函式或另乙個類中的成員函式可以訪問類中的私有成員和保護成員。c 中的友元為封裝隱藏這堵不透明的牆開了乙個小孔,外界可以通過這個小孔窺視內部的秘密。友元的正確使用能提高程式的執行效率,但同時也破壞了類的封裝...
C 友元函式與拷貝建構函式詳解
一 友元函式 1.友元函式概mlumvmvm述 1 友元函式是定義在乙個類外的普通函式。友元函式和普通函式的定義一樣 在類內必須將該普通函式宣告為友元。2 友元函式不是成員函式。不能通過物件來呼叫,而是直接呼叫 友元函式可以訪問類的公有 受保護以及私有成員,但是必須通過物件 物件指標或者物件引用來訪...
友元函式與友元類
物件導向程式設計的乙個重要思想就是實現資料隱藏 類的封裝特性 即 非成員函式不能訪問private 或者 protected 變數。有些時候我們需要不經成員函式而訪問private 或者 protected資料,那就需要用到 友元函式 或者友元類。使用friend關鍵字在類內任意位置宣告函式為友元函...