最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的友元函數(shù)與友元類詳情

 更新時(shí)間:2022年02月24日 16:21:10   作者:酷爾。  
這篇文章主要介紹了C++中的友元函數(shù)與友元類詳情,對(duì)類的封裝是C++三大特性中的一個(gè)重要特性,封裝好的數(shù)據(jù)在類的外部是訪問不到的但是一旦出了問題,想要操作被封裝的數(shù)據(jù)怎么辦呢?由此友元函數(shù)友元類誕生了,下文我們來(lái)詳細(xì)來(lái)接一下具體的有緣類吧

一、問題背景

對(duì)類的封裝是C++三大特性中的一個(gè)重要特性,封裝好的數(shù)據(jù)在類的外部是訪問不到的但是一旦出了問題,想要操作被封裝的數(shù)據(jù)怎么辦呢?由此友元函數(shù)友元類誕生了。在類中用friend關(guān)鍵字聲明的函數(shù)或類,可以對(duì)類體中的任何權(quán)限成員屬性進(jìn)行操作
有好處就有壞處友元函數(shù)、友元類嚴(yán)重破壞類的封裝性,不到迫不得已不要使用。

二、友元函數(shù)

聲明部分: friend 返回類型 函數(shù)名 (參數(shù)列表);

定義部分:返回類型 函數(shù)名 (參數(shù)列表){
        函數(shù)體,在這個(gè)函數(shù)體中可以對(duì)相應(yīng)對(duì)象的成員變量用運(yùn)算符進(jìn)行操作
    };

 友元函數(shù)就是一個(gè)全局函數(shù),成為了某類的朋友,可以隨意修改他的私有屬性。

具體使用方法如下:

#include<iostream>
using namespace std;
class test_Y {
private:
?? ?int a;
?? ?int b;
public:
?? ?test_Y(int a=0,int b=0) {
?? ??? ?this->a = a;
?? ??? ?this->b = b;
?? ?}
?? ?int getA() {
?? ??? ?return a;
?? ?}
?? ?int getB() {
?? ??? ?return b;
?? ?}
?? ?void print() {
?? ??? ?cout << "a:" << a << " " << "b:" << b << endl;
?? ?}
?? ?void tran2();
?? ?friend void tran1(test_Y& a);
?? ?void tran3(test_Y &a) {
?? ??? ?a.a = 0;
?? ??? ?a.b = 0;
?? ?}
};
void tran1(test_Y& a) {//傳進(jìn)去的是要改變的對(duì)象;
?? ?a.a = 100;//類的友元函數(shù)對(duì)變量的操作方法;
?? ?a.b = 100;
}
void test_Y::tran2() {
?? ?this->a = 200;//類的成員函數(shù)對(duì)變量的操作方法;
?? ?this->b = 200;//類中的私有成員變量只能在類體內(nèi)訪問不可以在類體外進(jìn)行訪問
}//在類體外的成員函數(shù)中也不行;在類體內(nèi)就可以通過成員符對(duì)成員變量進(jìn)行操作;
int main() {
?? ?test_Y a1(1, 2),a2(3,4);
?? ?a1.tran2();
?? ?a1.print();
?? ?tran1(a2);
?? ?a2.print();
?? ?a2.tran3(a2);
?? ?a2.print();
?? ?return 0;
}

友元函數(shù)在進(jìn)行流運(yùn)算符重載的時(shí)候非常實(shí)用。

三、友元類

聲明部分:friend 類名;

語(yǔ)法部分:在友元類中對(duì)另一個(gè)類中的成員屬性進(jìn)行操作;
友元類會(huì)破壞類的封裝性要慎用;

具體使用方法如下:【將B類設(shè)置為A類的友元類】

#include<iostream>
using namespace std;
class A {
private:
?? ?int a;
?? ?int b;
public:
?? ?A(int a = 0, int b = 0) {
?? ??? ?this->a = a;
?? ??? ?this->b = b;
?? ?}
?? ?void setAB(int a = 0, int b = 0) {
?? ??? ?this->a = a;
?? ??? ?this->b = b;
?? ?}
?? ?void print() {
?? ??? ?cout << a<<" "<< b << endl;
?? ?}//************************重點(diǎn)保護(hù)區(qū)********************************
?? ?friend class B;//如果去掉就不可以訪問;類的嵌套也可以完成相互的初始化
};//但是不可以在另一個(gè)類中直接對(duì)類的私有屬性進(jìn)行訪問;(去掉friend關(guān)鍵字顯而易見會(huì)報(bào)錯(cuò));
class B {//************************保護(hù)重點(diǎn),人人有責(zé)****************************
private:
?? ?int a;
?? ?int b;
public:
?? ?B(int a=0,int b=0) {
?? ??? ?this->a = a;
?? ??? ?this->b = b;
?? ?}
?? ?void BuseA(A &a) {//B使用A類對(duì)象的屬性
?? ??? ?this->a = a.a;//將類A對(duì)象的成員變量賦值給B類對(duì)象的成員變量;
?? ??? ?this->b = a.b;
?? ?}
?? ?void BsetA(A &a) {//B對(duì)象的屬性初始化A類對(duì)象的屬性
?? ??? ?a.a = this->a;
?? ??? ?a.b = this->b;
?? ?}
?? ?void print() {
?? ??? ?cout << a << " " << b << endl;
?? ?}
};
int main() {
?? ?B b1(1, 2);
?? ?A a1(3, 4);
?? ?b1.BsetA(a1);//B設(shè)置A;
?? ?a1.print();
?? ?a1.setAB(100, 200);//對(duì)A的對(duì)象a1重新賦值;用于測(cè)試下面是否能夠改變B;
?? ?b1.BuseA(a1);//B的對(duì)象在A對(duì)象的基礎(chǔ)之上初始化;
?? ?b1.print();
}

友元類,在不到迫不得已的時(shí)候,不要使用。友元函數(shù)在進(jìn)行

到此這篇關(guān)于C++中的友元函數(shù)與友元類詳情的文章就介紹到這了,更多相關(guān)C++友元函數(shù)和友元類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)效果

    Qt使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)效果

    我們經(jīng)常能夠在外面看到那種滾動(dòng)字幕,那么本文就拿Qt來(lái)做一個(gè)吧,本文將使用事件與定時(shí)器實(shí)現(xiàn)字幕滾動(dòng)的效果,感興趣的小伙伴可以了解一下
    2023-06-06
  • C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(完整版)

    C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(完整版)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 詳解c++優(yōu)先隊(duì)列priority_queue的用法

    詳解c++優(yōu)先隊(duì)列priority_queue的用法

    本文詳細(xì)講解了c++優(yōu)先隊(duì)列priority_queue的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • C語(yǔ)言近萬(wàn)字為你講透樹與二叉樹

    C語(yǔ)言近萬(wàn)字為你講透樹與二叉樹

    樹是計(jì)算機(jī)算法最重要的非線性結(jié)構(gòu)。因?yàn)闃淠芎芎玫孛枋鼋Y(jié)構(gòu)的分支關(guān)系和層次特性,所以在計(jì)算機(jī)科學(xué)和計(jì)算機(jī)應(yīng)用領(lǐng)域有著廣泛的應(yīng)用。這篇文章我就帶大家一起了解一下樹、二叉樹這種結(jié)構(gòu),下篇文章會(huì)重點(diǎn)向大家介紹二叉樹的遍歷算法
    2022-05-05
  • Opencv光流運(yùn)動(dòng)物體追蹤詳解

    Opencv光流運(yùn)動(dòng)物體追蹤詳解

    這篇文章主要為大家詳細(xì)介紹了Opencv光流運(yùn)動(dòng)物體追蹤的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解C++的模板中typename關(guān)鍵字的用法

    詳解C++的模板中typename關(guān)鍵字的用法

    在C++的Template中我們經(jīng)??梢砸姷绞褂胻ypename來(lái)定義類型名稱,更加具體的我們就在接下來(lái)為大家詳解C++的模板中typename關(guān)鍵字的用法,需要的朋友可以參考下:
    2016-06-06
  • C語(yǔ)言結(jié)構(gòu)體的全方面解讀

    C語(yǔ)言結(jié)構(gòu)體的全方面解讀

    C 數(shù)組允許定義可存儲(chǔ)相同類型數(shù)據(jù)項(xiàng)的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲(chǔ)不同類型的數(shù)據(jù)項(xiàng)
    2021-10-10
  • C語(yǔ)言實(shí)現(xiàn)經(jīng)典掃雷小游戲的示例代碼

    C語(yǔ)言實(shí)現(xiàn)經(jīng)典掃雷小游戲的示例代碼

    掃雷游戲是在一個(gè)指定的二維空間里,隨機(jī)布置雷,把不是雷的位置都找出來(lái),在你點(diǎn)一個(gè)位置的時(shí)候它會(huì)顯示它周圍全部雷的個(gè)數(shù),根據(jù)這個(gè)線索去找 ,會(huì)更容易贏。本文將用C語(yǔ)言實(shí)現(xiàn)這一經(jīng)典游戲,感興趣的可以嘗試一下
    2022-11-11
  • C++實(shí)現(xiàn)數(shù)組的排序/插入重新排序/以及逆置操作詳解

    C++實(shí)現(xiàn)數(shù)組的排序/插入重新排序/以及逆置操作詳解

    將新的數(shù)字與已經(jīng)排序好的數(shù)組中的數(shù)字一一比較,直到找到插入點(diǎn),然后將插入點(diǎn)以后的數(shù)字都向后移動(dòng)一個(gè)單位(a[i+1]=a[i]),然后將數(shù)據(jù)插入即可
    2013-10-10
  • C/C++的浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式分析及實(shí)例

    C/C++的浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式分析及實(shí)例

    這篇文章主要介紹了C/C++的浮點(diǎn)數(shù)在內(nèi)存中的存儲(chǔ)方式分析及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2016-11-11

最新評(píng)論

崇文区| 巍山| 巴塘县| 正镶白旗| 焦作市| 章丘市| 鞍山市| 保德县| 北京市| 波密县| 普格县| 北川| 特克斯县| 施甸县| 尉犁县| 应城市| 康平县| 从江县| 桦甸市| 罗江县| 普陀区| 德钦县| 庄河市| 江口县| 平阳县| 石林| 蓬莱市| 怀仁县| 黄平县| 阳高县| 会宁县| 永顺县| 疏勒县| 集安市| 永新县| 阿拉善左旗| 隆昌县| 泸水县| 深水埗区| 南充市| 呈贡县|