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