C++ 類(lèi)的友元機(jī)制解讀
下面給出C++類(lèi)的友元機(jī)制說(shuō)明(對(duì)類(lèi)private、protected成員訪問(wèn)),需要注意的是,友元機(jī)制盡量不用或者少用,雖然它會(huì)提供某種程度的效率,但會(huì)帶來(lái)數(shù)據(jù)安全性的問(wèn)題。
類(lèi)的友元
友元是C++提供的一種破壞數(shù)據(jù)封裝和數(shù)據(jù)隱藏的機(jī)制。
通過(guò)將一個(gè)模塊聲明為另一個(gè)模塊的友元,一個(gè)模塊能夠引用到另一個(gè)模塊中本是被隱藏的信息??梢允褂糜言瘮?shù)和友元類(lèi)。
為了確保數(shù)據(jù)的完整性,及數(shù)據(jù)封裝與隱藏的原則,建議盡量不使用或少使用友元。
友元函數(shù)
友元函數(shù)是在類(lèi)聲明中由關(guān)鍵字friend修飾說(shuō)明的非成員函數(shù),在它的函數(shù)體中能夠通過(guò)對(duì)象名訪問(wèn) private 和protected成員
作用:增加靈活性,使程序員可以在封裝和快速性方面做合理選擇。
訪問(wèn)對(duì)象中的成員必須通過(guò)對(duì)象名。
舉例說(shuō)明:使用友元函數(shù)計(jì)算兩點(diǎn)間的距離
#include <iostream> #include <cmath> using namespace std; class Point {//Point類(lèi)聲明 public: //外部接口 Point(int x=0, int y=0) : x(x), y(y) { } int getX() { return x; } int getY() { return y; } friend float dist(Point &a, Point &b); private: //私有數(shù)據(jù)成員 int x, y; }; float dist( Point& a, Point& b) { double x = a.x - b.x; double y = a.y - b.y; return static_cast<float>(sqrt(x * x + y * y)); } int main() { Point p1(1, 1), p2(4, 5); cout <<"The distance is: "; cout << dist(p1, p2) << endl; return 0; }
友元類(lèi)
若一個(gè)類(lèi)為另一個(gè)類(lèi)的友元,則此類(lèi)的所有成員都能訪問(wèn)對(duì)方類(lèi)的私有成員。
聲明語(yǔ)法:將友元類(lèi)名在另一個(gè)類(lèi)中使用friend修飾說(shuō)明。
類(lèi)的友元關(guān)系是單向的
如果聲明B類(lèi)是A類(lèi)的友元,B類(lèi)的成員函數(shù)就可以訪問(wèn)A類(lèi)的私有和保護(hù)數(shù)據(jù),但A類(lèi)的成員函數(shù)卻不能訪問(wèn)B類(lèi)的私有、保護(hù)數(shù)據(jù)。
以上就是C++ 類(lèi)的友元機(jī)制解讀的詳細(xì)內(nèi)容,更多關(guān)于C++ 類(lèi)的友元機(jī)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
基于Qt+opencv開(kāi)發(fā)的視頻播放器示例詳解
這篇文章主要為大家介紹了基于Qt+opencv開(kāi)發(fā)的視頻播放器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理程序
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)學(xué)生信息管理程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹
這篇文章主要介紹了C++中構(gòu)造函數(shù)與析構(gòu)函數(shù)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Linux下Select多路復(fù)用實(shí)現(xiàn)簡(jiǎn)易聊天室示例
大家好,本篇文章主要講的是Linux下Select多路復(fù)用實(shí)現(xiàn)簡(jiǎn)易聊天室示例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽2021-12-12C語(yǔ)言創(chuàng)建數(shù)組實(shí)現(xiàn)函數(shù)init,empty,reverse
這篇文章主要介紹了C語(yǔ)言創(chuàng)建數(shù)組實(shí)現(xiàn)函數(shù)init,empty,reverse,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07使用ShellClass獲取文件屬性詳細(xì)信息的實(shí)現(xiàn)方法
本篇文章是對(duì)ShellClass獲取文件屬性詳細(xì)信息的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++ 數(shù)字的反轉(zhuǎn)實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了C++ 數(shù)字的反轉(zhuǎn)實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-06-06