C++友元函數與拷貝結構函數詳解。本站提示廣大學習愛好者:(C++友元函數與拷貝結構函數詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是C++友元函數與拷貝結構函數詳解正文
1、友元函數
1.友元函數概述:
(1)友元函數是界說在一個類外的通俗函數。
友元函數和通俗函數的界說一樣;在類內必需將該通俗函數聲明為友元。
(2)友元函數不是成員函數。
不克不及經由過程對象來挪用,而是直接挪用;友元函數可以拜訪類的私有、受掩護和公有成員,然則必需經由過程對象、對象指針或許對象援用來拜訪。
2.友元函數的聲明:
friend 前往值類型 函數名(參數表);
在類中只須要將這個聲明放置在私有部門便可。
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函數聲明為友元函數 }; double distance(Point my1, Point my2) { return sqrt((my1.x-my2.x)*(my1.y-my2.y)); }
3.友元函數在界說時即通俗函數的界說,後面不加friend,在類內聲明時,必需加friend.
在友元函數失效的對象的感化規模內可以拜訪公有、私有和受掩護成員。
main函數不克不及聲明為類的友元函數,main函數只能做主調不克不及做被調。
2、拷貝結構函數:
1.拷貝結構函數概述:
(1)拷貝結構函數是一個結構函數,它屬於類的成員函數(廣泛界說為public);和類名同名然則無前往值;創立對象時,若該對象的初始化值是另外一個同類對象時(賦值不挪用)挪用。
(2)拷貝結構函數的聲明
類名::類名(類名 &對象援用名); 或另外一種聲明方法
類名::類名(const 類名 &對象援用名)
留意:拷貝結構函數只要一個參數,並且參數必需是一個對象的援用;每一個類其實都要有一個拷貝結構函數,若沒有顯式的界說,那末體系會主動界說而且設置其屬性為私有。
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;}//拷貝結構函數的聲明可以省略第一個類名和:: }; Point(Point &pf) { *this = pf; //完成拷貝結構 } int main() { Point p1; //挪用無參結構 Point p2(3, 4); //挪用結構 Point p3(p2); //挪用拷貝結構 }
留意:假如沒有應用const潤飾,那末湧現pf.x=8這類語句是正當的,然則加了const以後長短法的。別的,援用完pf也會釋放。