国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++友元函數(shù)與拷貝構(gòu)造函數(shù)詳解

2020-01-26 15:29:01
字體:
供稿:網(wǎng)友

一、友元函數(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ù)必須是一個對象的引用;每個類其實都要有一個拷貝構(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也會釋放。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鄢陵县| 荔浦县| 庆安县| 塘沽区| 彭水| 冷水江市| 龙山县| 修文县| 胶州市| 吴堡县| 南阳市| 赣榆县| 扬中市| 普洱| 贡嘎县| 尼玛县| 津市市| 颍上县| 聂荣县| 沂南县| 班戈县| 牡丹江市| 高平市| 天祝| 永清县| 广饶县| 柳州市| 且末县| 嵩明县| 淮北市| 吕梁市| 广州市| 阳信县| 林口县| 和平县| 平顺县| 蓬莱市| 邵武市| 德阳市| 德阳市| 苍梧县|