日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

C++ primer 第七章之 友元函数与友元类

發布時間:2023/11/27 生活经验 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ primer 第七章之 友元函数与友元类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.為什么需要友元函數??

  • 類具有封裝和信息隱藏的特性:
    • 只有類的成員函數才能訪問類的私有成員,程序中的其他函數是無法訪問私有成員的 ;
    • 非成員函數可以訪問類中的公有成員,但是如果將數據成員都定義為公有的,又破壞了隱藏的特性 ;
  • 友元是一種定義在類外部的普通函數,但它需要在類體內進行聲明.在說明時前面加以關鍵字?friend ;
  • 友元不是成員函數,但它可以訪問類中的私有成員 ;
#include <iostream>
#include <math.h>
using namespace std;
class Point{
public:Point(double xx, double yy) { x=xx; y=yy; }//構造函數void Getxy();//聲明一個普通成員函數friend double Distance(Point &a, Point &b);//將一個普通函數聲明成友元
private:double x, y;
};void Point::Getxy(){cout<< "x:"<< this->x << " "<<"y:" <<this->y<<endl;
}
double Distance(Point &a, Point &b){double dx = a.x - b.x;double dy = a.y - b.y;return sqrt(dx*dx+dy*dy);
}
/*
說明:在該程序中的Point類中說明了一個友元函數Distance(),它在說明時前邊加friend關鍵字,標識它不是成員函數,而是友元函數。
它的定義方法與普通函數定義一樣,而不同于成員函數的定義,因為它不需要指出所屬的類。
但是,它可以引用類中的私有成員,函數體中 a.x,b.x,a.y,b.y都是類的私有成員,它們是通過對象引用的。
在調用友元函數時,是同普通函數的調用一樣,不要像成員函數那樣調用.
*/
int main()
{Point p1(3.0, 4.0), p2(6.0, 8.0);p1.Getxy();p2.Getxy();double d = Distance(p1, p2);cout<<"Distance is "<< d <<endl;return 0;
}

?

:別的類的成員函數作友元,也就是2個類相互調用,無論誰定義在前在后,編譯時都有沖突.

要解決這個問題:將類的聲明、定義分開.

?

2.友元類

友元類:一個類A可以作另一個類B的友元.意味著這個類A的所有成員函數都是另一個類B的友元函數

?

class B{//...friend class A; //聲明 A是B的友元類//...
};class A{//...};

?

使用友元類時注意:

  • 友元關系不能被繼承;
  • 友元關系是單向的,不具有交換性:若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明;
  • 友元關系不具有傳遞性:若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明;
    #include <iostream>  using namespace std;  class CObj  
    {  
    public:  CObj() : mX(0), mY(0) {}  friend class CFriend;  
    private:  void PrintData() const  {  cout << "mX = " << mX << endl  << "mY = " << mY << endl;  }  int mX;  int mY;  
    };  class CFriend  
    {  
    public:  CFriend(int x, int y)  {  mObj.mX = x;    //直接調用類CObj的私有數據成員  mObj.mY = y;  }  void ShowData() const  {  mObj.PrintData();   //直接調用類CObj的私有成員函數  }  
    private:  CObj mObj;  
    };  int main()  
    {  CFriend one(3, 4);  one.ShowData();  return 0;  
    }
    

      

?

轉載于:https://www.cnblogs.com/chenjz1993/p/6753454.html

總結

以上是生活随笔為你收集整理的C++ primer 第七章之 友元函数与友元类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。