C++ 友元的一點總結

來源:互聯網
上載者:User

標籤:c++

1.是什嗎?

友元機制允許一個類將對其非公有成員的訪問權授予制定的函數或類。 ——《c++ primer》

2.為什麼要提出?:
類中一些成員函數使用較為頻繁,需要大量時間開銷,為了減少時間開銷,就允許破壞程式的封裝性,使用一個外部函數或類可以訪問該類中的私人成員。所以友元的作用在於提高程式的運行效率(即減少了類型檢查和安全性檢查等都需要的時間開銷)。

3.友元的問題:
友元的使用破壞了類的封裝性和隱藏性,使得非成員函數可以訪問類的私人成員。

4.友元的曆史:
友元的產生是由於最初電腦的運行速度沒有現在快,而C++語言講的就是速度,為瞭解決其它類方便訪問類的私人變數或者說是私人成員函數,故就使用了友元這個機制,但是現在的電腦速度的提高,友元所產生的作用也漸漸地看不出效果來了,但是C++標準沒有把友元取消.

5.友元使用的注意點:
友元有點突破了物件導向思想的封裝性,能少用就少用。
下面說一下什麼時候使用友元函數和友元類,其實二者沒有太大的區別,如果只是一般函數訪問類的私人成員或者說是私人資料成員,使用友元函數就可以了,如果是使用類來訪問其它類的私人資料成員和私人成員函數就使用友元類.
友元的聲明以關鍵字friend開始,只能出現在類定義的內部,友元聲明可以出現在類中任何地方,友元不是授予友元關係的那個類的成員,所以他們不受其聲明出現部分的存取控制影響。通常最好放在類定義的開始或結尾。

給個例子:

(1) For class Point(點), define two functions to implement the same capability—calculate the distance between two points. One function is defined as member function of Point (named distance_2), the other is defined as friend function (named distance_1). Complete the definition of class Point to make the program run successfully. Keep the output in your document.

#include <iostream>#include <cmath>using namespace std;class Point     {      friend double distance_1(Point&,Point&);public:          Point( double xx = 0.0, double yy = 0.0 ) { x = xx; y = yy; }     double getX() { return x; }     double getY() { return y; }     double distance_2 ( Point &);private:          double x,y;};double distance_1 ( Point & a, Point &b){     return  sqrt(pow(a.x-b.x,2)+pow(a.y-b.y,2));}double Point::distance_2 ( Point & p){     return sqrt(pow(x-p.x,2)+pow(y-p.y,2));}int main(){       Point p1(3, 5), p2(4, 6);     double result1 = distance_1(p1, p2);        double result2 = p1.distance_2(p2);     cout << "The distance is  " << result1 << ‘\t‘<< result2 << endl;     return 0;}

這裡分別使用成員函數和友元函數對兩點之間的距離進行了計算。這裡需要注意的是這裡只有distance_1可以聲明為友元函數,而distance_2不能聲明為友元函數。因為distance_2隻有一個參數,並且友元函數不是成員函數,不能對一個參數進行距離計算

C++ 友元的一點總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.