日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C++中友元函数,友元类数详解

發布時間:2025/3/11 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++中友元函数,友元类数详解的全部內容,希望文章能夠幫你解決所遇到的問題。

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