C++中友元函数,友元类数详解
生活随笔
收集整理的這篇文章主要介紹了
C++中友元函数,友元类数详解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++控制對類對象私有部分的訪問,為了適應的編程問題,所以在C++中提供了特定的訪問權限:友元。
友元分為3中即:
? ? ?1:友元函數;
? ? ? 2:友元類:
? ? ? 3:友元成員函數。
一、友元函數
定義:有一類特殊的非成員函數可以訪問類的私有成員,它們被稱為友元函數:
class Time{ public: friend Time operator *(double m,const Time & t)//需要先在類中定義 } Time operator *(double m,const Time & t) //定義完后在后面寫友元函數,即先定義后寫函數 {}二、友元類
定義:A是B的友元類,A的成員函數可以訪問B的私有成員
#include <iostream> using namespace std; class Rectangle;//類聲明 class Circle;//類聲明 void show(Circle &,Rectangle &);//獨立函數原型聲明class Rectangle{ private:double length;double width; public:friend void show(Circle &,Rectangle &);//友元函數聲明friend class Circle;//友元類聲明Rectangle(int l,int w){length=l;width=w;}void show(){cout<<"矩形對象輸出:"<<length<<","<<width<<endl;}void showCir(Circle &);//為什么聲明和定義要分開寫?//因為,函數體中的Circle對象此時不存在,要Circle定義后才有。//所以,定義部分要放在Circle類的定義之后。};class Circle{ private:double radius; public:friend class Rectangle;//友元類聲明friend void show(Circle &,Rectangle &);//友元函數聲明(原型聲明)Circle(double r){radius=r;}void show(){cout<<"圓對象輸出:"<<radius<<endl;}void showRec(Rectangle &r)//想想這個函數的聲明和定義為什么不用分開寫!!!{cout<<"在圓對象成員函數中訪問矩形對象的私有成員:"<<r.length<<","<<r.width<<endl;} };void Rectangle::showCir(Circle &c) {cout<<"矩形對象成員函數中訪問圓的私有成員:"<<c.radius<<endl; } void show(Circle &c,Rectangle &r) {cout<<"獨行函數輸出:"<<":"<<c.radius<<","<<r.length<<","<<r.width<<endl; }void main() {Circle c(5.0);//定義圓對象Rectangle r(10,20);//定義矩形類對象//要區分下面每個函數調用的意義和功能。c.show();r.show();show(c,r);//獨立函數訪問Circle,Rectangle類對象的私有成員radius,length,widthc.showRec(r);r.showCir(c);}總結:
1:友元類之間的關系不能傳遞,不能繼承
2:友元關系是單向的,不具有交換性。若類B是類A的友元,類A不一定是類B的友元,要看在類中是否有相應的聲明。
3:友元關系不具有傳遞性。若類B是類A的友元,類C是B的友元,類C不一定是類A的友元,同樣要看類中是否有相應的申明。
總結
以上是生活随笔為你收集整理的C++中友元函数,友元类数详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于sympy的python实现三层BP
- 下一篇: s3c2440移植MQTT