C++友元函數(shù)與拷貝構(gòu)造函數(shù)詳解
一、友元函數(shù)
1.友元函數(shù)概述:
(1)友元函數(shù)是定義在一個類外的普通函數(shù)。
友元函數(shù)和普通函數(shù)的定義一樣;在類內(nèi)必須將該普通函數(shù)聲明為友元。
(2)友元函數(shù)不是成員函數(shù)。
不能通過對象來調(diào)用,而是直接調(diào)用;友元函數(shù)可以訪問類的公有、受保護(hù)以及私有成員,但是必須通過對象、對象指針或者對象引用來訪問。
2.友元函數(shù)的聲明:
friend 返回值類型 函數(shù)名(參數(shù)表);
在類中只需要將這個聲明放置在公有部分即可。
class Point { double x, y; public: Point(){x = 0.0; y = 0.0;} Point(double xx, double yy){x = xx; y = yy;} friend double distance(Point, Point);//將distance函數(shù)聲明為友元函數(shù) }; double distance(Point my1, Point my2) { return sqrt((my1.x-my2.x)*(my1.y-my2.y)); }
3.友元函數(shù)在定義時即普通函數(shù)的定義,前面不加friend,在類內(nèi)聲明時,必須加friend.
在友元函數(shù)生效的對象的作用范圍內(nèi)可以訪問私有、公有以及受保護(hù)成員。
main函數(shù)不能聲明為類的友元函數(shù),main函數(shù)只能做主調(diào)不能做被調(diào)。
二、拷貝構(gòu)造函數(shù):
1.拷貝構(gòu)造函數(shù)概述:
(1)拷貝構(gòu)造函數(shù)是一個構(gòu)造函數(shù),它屬于類的成員函數(shù)(普遍定義為public);和類名同名但是無返回值;創(chuàng)建對象時,若該對象的初始化值是另一個同類對象時(賦值不調(diào)用)調(diào)用。
(2)拷貝構(gòu)造函數(shù)的聲明
類名::類名(類名 &對象引用名); 或另一種聲明方式
類名::類名(const 類名 &對象引用名)
注意:拷貝構(gòu)造函數(shù)只有一個參數(shù),而且參數(shù)必須是一個對象的引用;每個類其實(shí)都要有一個拷貝構(gòu)造函數(shù),若沒有顯式的定義,那么系統(tǒng)會自動定義并且設(shè)置其屬性為公有。
2.示例程序:
class Point { int x, y; public: Point(){x = 0; y = 0;} Point(int xx, int yy){x = xx; y = yy;} Point(Point &pf){x = pf.x; y = pf.y;}//拷貝構(gòu)造函數(shù)的聲明可以省略第一個類名和:: }; Point(Point &pf) { *this = pf; //完成拷貝構(gòu)造 } int main() { Point p1; //調(diào)用無參構(gòu)造 Point p2(3, 4); //調(diào)用構(gòu)造 Point p3(p2); //調(diào)用拷貝構(gòu)造 }
注意:如果沒有使用const修飾,那么出現(xiàn)pf.x=8這種語句是合法的,但是加了const之后是非法的。另外,引用完pf也會釋放。
上一篇:VC運(yùn)用OPENGL加載BMP紋理圖的實(shí)現(xiàn)方法匯總
欄 目:C語言
下一篇:C++中拷貝構(gòu)造函數(shù)的應(yīng)用詳解
本文標(biāo)題:C++友元函數(shù)與拷貝構(gòu)造函數(shù)詳解
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3618.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?