国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

C++之友元的學習總結 友元的概念

電子設計 ? 來源:電子設計 ? 作者:電子設計 ? 2020-12-24 17:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、友元的概念:

1、什么是友元?

友元是c++中的一種關系

友元關系發生在函數與類之間或者類與類之間

友元關系是單項的,不能傳遞

2、友元的用法:

在類中以friend關鍵字聲明友元

類的友元可以是其它類或者具體函數

友元不是類的一部分

友元不受類中訪問級別的限制

友元可以直接訪問具體類的所有成員

3、友元的語法:

在類中使用friend 關鍵字對函數或者類進行聲明:

class Test

double x;
double y;
friend void func(Test& t);
};
void func(Test& t)

注意:func() 全局函數是 Test 類的友元,func() 可以訪問Test 類的所有成員,但是 func() 不是 Test 的成員函數。

示例代碼:

#include <stdio.h>
#include <math.h>
class Test

double x;
double y;
public:
Test(double x,double y)

this->x=x;
this->y=y;

double getX()

return x;

double getY()

return y;

friend double func(Test& t1,Test& t2);
};
double func(Test& t1,Test& t2)

double ret =0;
ret = (t2.y-t1.y)*(t2.y-t1.y)+(t2.x-t1.x)*(t2.x-t1.x);
ret = sqrt(ret);
return ret;

int main()

Test t1(1,2);
Test t2(10,20);
printf("t1(%f,%f)",t1.getX(),t1.getY());
printf("t2(%f,%f)",t2.getX(),t2.getY());
printf("(t1,t2)=%f",func(t1,t2));

return 0;

輸出結果:

root@txp-virtual-machine:/home/txp/add# g++ test.cpp
root@txp-virtual-machine:/home/txp/add# ./a.out
t1(1.000000,2.000000)
t2(10.000000,20.000000)
(t1,t2)=20.124612

4、友元的尷尬:

友元是為了兼顧c語言的高效而誕生的

友元直接破壞了面向對象的封裝性

友元在實際開發產品中的高效是得不償失的

友元在軟件工程中已經慢慢被遺棄了

5、注意事項:

友元關系不具備傳遞性

類的友元可以是其它類的成員函數

類的友元可以是某個完整的類

所有的成員函數都是友元

代碼測試:

#include <stdio.h>
class ClassC

const char* n;
public:
ClassC(const char* n)

this->n = n;


friend class ClassB;
};
class ClassB

const char* n;
public:
ClassB(const char* n)

this->n = n;


void getClassCName(ClassC& c)

printf("c.n = %s", c.n);


friend class ClassA;
};
class ClassA

const char* n;
public:
ClassA(const char* n)

this->n = n;


void getClassBName(ClassB& b)

printf("b.n = %s", b.n);

/*
void getClassCName(ClassC& c)

printf("c.n = %s", c.n);

*/
};
int main()

ClassA A("A");
ClassB B("B");
ClassC C("C");

A.getClassBName(B);
B.getClassCName(C);

return 0;

輸出結果:

root@txp-virtual-machine:/home/txp/add# ./a.out
b.n = B
c.n = C

如果把上面屏蔽的那部分代碼打開,編譯就會報錯(因為友元沒有傳遞性哦):

root@txp-virtual-machine:/home/txp/add# g++ test.cpp
test.cpp: In member function ‘void ClassA::getClassCName(ClassC&)’:
test.cpp:5:17: error: ‘const char* ClassC::n’ is private
const char* n;

test.cpp:48:32: error: within this context
printf("c.n = %s", c.n);

6、小結:

友元是為了兼顧c語言的高效而誕生的

友元直接破壞了面向對象的封裝性

友元關系不具備傳遞性

類的友元可以是其它類的成員函數

類的友元可以是某個完成的類

二、總結:

好了,今天的分享就到這里,如果文章中有錯誤或者不理解的地方,可以交流互動,一起進步。我是txp,下期見!

審核編輯:符乾江
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 可編程邏輯
    +關注

    關注

    7

    文章

    526

    瀏覽量

    45402
  • C++
    C++
    +關注

    關注

    22

    文章

    2124

    瀏覽量

    77115
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    服務交易評價

    功能簡介 服務交易評價是服務平臺官方提供的,反映用戶對服務交易體驗的評價系統。在服務中產生交易的用戶,可以針對本元服務的交易體驗進行打分、發表評論。 真實的評價內容可以幫助用戶
    發表于 12-29 10:35

    C語言和C++之間的區別是什么

    (inheritance)、多態(polymorphism)等面向對象編程概念。程序員可以通過定義類來創建對象,并利用類的實例進行操作。 2、類型系統與安全性: C++具有更為嚴格的類型檢查機制
    發表于 12-11 06:23

    發布服務提交審核

    完成所有應用信息和版本信息的配置后,可將服務提交至華為方進行發布審核。 登錄AppGallery Connect,點擊“APP與服務”。 選擇要發布的服務。 左側導航選擇“應用上架 &
    發表于 12-04 14:23

    發布服務設置上架時間

    設置上架時間 登錄AppGallery Connect,點擊“APP與服務”。 選擇要發布的服務。 左側導航選擇“應用上架 > 版本信息”下待發布的版本。 進入“上架
    發表于 12-03 09:46

    發布服務填寫審核信息與聯系方式

    填寫審核信息 登錄AppGallery Connect,點擊“APP與服務”。 選擇要發布的服務。 左側導航選擇“應用上架 > 版本信息”下待發布的版本。 進入“應用審核信息”區域
    發表于 12-01 14:30

    發布服務配置隱私聲明

    服務必須先使用AGC的隱私聲明托管服務生成自己的隱私聲明,才能在版本信息頁面選擇到。詳細內容參見配置隱私聲明(服務)和配置用戶協議。 登錄AppGallery Connect,點擊“APP與
    發表于 11-25 11:24

    發布服務配置內容分級

    年齡分級作為服務的重要屬性,在華為應用市場的應用詳情頁展示給用戶,幫助用戶找到適合其年齡段的服務,從而為未成年人用戶打造純凈的使用環境。 1.AGC提供了調查問卷,根據您回答的內容,自動生成
    發表于 11-21 11:29

    脈沖神經模型的硬件實現

    如圖所示展示了LIF神經的膜電勢Vmem隨時間戳timestamp動態變化的過程,當接收到輸入脈沖后,LIF神經的膜電勢值Vmem便會升高,直至達到閾值電壓Vthersh,此時神經產生輸出脈沖
    發表于 10-24 08:27

    服務配置支持設備

    發布時,您可以為服務配置分發至多種設備,默認發布設備為您創建元服務用時選擇的設備類型,您可以根據實際情況進行修改。您只需發布一次,用戶即可在多種設備上使用您的服務。 登錄AppGallery
    發表于 10-22 16:54

    服務上架自檢

    為提高服務審核通過率,建議您使用上架自檢功能。該功能使用熱門移動終端設備,按照華為應用市場上架標準對服務進行兼容性、穩定性、性能、功耗、UX、隱私等測試,可幫助您提前發現和解決問題。 登錄
    發表于 10-21 17:18

    服務發布準備工作

    發布服務前,請詳細了解華為應用市場的審核要求,并提前準備發布所需的文件、資源,以便您能順利、快速通過發布審核流程。 仔細閱讀服務審核指南,了解發布服務至華為應用市場需要遵循的規則和要求。 完成
    發表于 10-10 15:48

    【「Yocto項目實戰教程:高效定制嵌入式Linux系統」閱讀體驗】+基礎概念學習理解

    是 Yocto 項目的核心部分之一,書中對數據的概念、文件、語法以及菜譜和層的相關內容進行了詳細闡述。通過學習這部分內容,我了解到數據在 Yocto 項目中的重要性,它定義了構建系
    發表于 08-04 22:29

    鴻蒙應用服務開發-Account Kit配置登錄權限

    一、場景介紹 華為賬號登錄是基于OAuth 2.0協議標準和OpenID Connect協議標準構建的OAuth2.0 授權登錄系統,服務可以方便地獲取華為賬號用戶的身份標識,快速建立服務內
    發表于 04-15 16:03

    鴻蒙應用服務開發-Account Kit概述

    的守護措施,如僅允許訪問適齡服務、增強隱私保護、限制設備使用時長等。 三、基本概念 permission:數據或接口權限,通過該權限判斷應用是否能獲取對應數據或調用對應接口。 四、約束與限制 華為
    發表于 03-31 12:08

    C++學到什么程度可以找工作?

    C++學到什么程度可以找工作?要使用C++找到工作,特別是作為軟件開發人員或相關職位,通常需要掌握以下幾個方面: 1. **語言基礎**:你需要對C++的核心概念有扎實的理解,包括但不
    發表于 03-13 10:19