GeekBand c++學習筆記(friend的一點體悟)

HELLO,大家好,我是GeekBand的學員,在學習網課上,因為作業的關係,所以要向大家發表一下我在學習C++上的一些心得與筆記,可能寫得不太好,因為畢竟剛接觸程式語言才半年,所以大家若是有甚麼地方覺得錯誤或是解釋的不是很恰當,都可以跟我說,或是qq給我,我都可以跟大家討論關於電腦的事物

那我們就開始吧!這周的我想分享的是我對於類中friend(友元)的理解,那friend是什麼?friend就是可以調用在在類中的數據的函數,那類的特性是:封裝性與資訊隱藏,因而才會有public與private的區別,也就是說只有類的成員函數才能訪問類的私有成員(private),非類的成員函數只能訪問公有成員(public),如下:

class temp
{
	public:
		int a=10;
	private:
		int b=20;
};</span></span>

在這個class中,我們用了int定義了兩個數(a,b),但是由於兩個數所放置的位置不同,差異就出來了,在temp類外,我們是無法調用與改變b的,但是a卻可以,因為兩者的權限不同

我們可以發現,若是想要保護數據與保持封裝性,就必須要把數據放在private,但是有時候要利用時,卻會變得相當的麻煩,在安全性與程式運行效率中都會變得相當不好。

為了解決這些問題,友元這個方案設計就應運而生。友元是定義在類之外的函數或類,但在類中說明,然後再說明的同時需要把friend放在整個函數或是類前,所以嚴格的看,其實友元不是類中的成員函數,但是可以訪問類中的private成員,所以可以提高類的運行效率,但是它同時也破壞類的封裝性與隱藏性,所以在使用上還是要相當謹慎,下面是我所寫的friend用法:

int complex(int a,int b);
class temp
{
	public:
	private:
		int aa,bb;
		friend int complex(int a,int b);
};</span>

然而我是這樣想的,因為你所創造的函數是在外,而firend我就將他想成是個標記,把她聲明在類中,告訴類,我是你的朋友或是成員,我就可以自由取用你的object。

這裡再補充一下,其實每個類中的object都可以看成是對方的friend,下面我們看一下:

class temp
{
	public:
		temp(int a=0,int b=0):aa(a),bb(b)
		{}
		int func(const temp& param)
		{
			return param.aa+param.bb;
		}
	private:
		int aa,bb;
};</span>

這段代碼是由侯老師在課堂中介紹中,我就改一下一些字母而已,可以看到,其實函數func在調用的時候是沒有破壞封裝性的,但是他的前面也沒有加上friend,這是為什麼?因為在class中每個object都是互為友元的,只是不需要把friend寫出。

最後我們再總結一下有玄的性質與意義:

1.友元是為了在調用時,運行效率更好,卻也失去封裝性

2.友元在作用時是可以自由取得private成員

3.friend是加在想要訪問class中的private的函數或是類

时间: 2024-10-27 05:14:12

GeekBand c++學習筆記(friend的一點體悟)的相关文章

Python學習筆記 第一課 Basic Information of Python

因學校習作需要而研究Python 使用教材:Python3.4.1 Official Documentation - The Python Standard Library Chapter 1 Basic Information of Python 1) Nature of Python: a high-level, interpreted language 2) Aim of Python: to automate tasks on computers 3) Examples of usage

Java學習筆記(基本語法)

本文件是以學習筆記的概念為基礎,用於自我的複習紀錄,不過也開放各位的概念指證.畢竟學習過程中難免會出現觀念錯誤的問題.也感謝各位的觀念指證. 安裝JDK 在Oracle網站中找自己系統的JDK下載位置 設定 PATH windows10 =>本機=>右鍵內容=>進階系統設定=>進階=>環境變數 設定 第一個程式Hello World 12345678910111213 public class { /** 程式的預設的進入點, 必須是public static, 另外這是Ja

學習筆記:Linux常見題目解析分享

學習題目分享解答 --此篇博客感謝老男孩老師教學,才得以學習完成此篇博客-- 描述linux系統的啟動過程?     (企業面試題) (1)簡單描述(口頭) 1.開機BIOS自檢    --->檢查硬件是否正常   自檢完後 根據啟動順序,教給下一個設備處理 2.MBR引導    ---->(硬盤) 硬盤0柱面0磁道1扇區的前446byte      (1扇區 512字節)   剩下的(512-446 =66)    其中64用來分區表(4個--->意思是4個主分區或4個擴展分區)  最

學習筆記:Linux 文件和目錄屬性及權限

1 . Linux 中的文件 1.1 文件屬性概述 在linux裡面一切皆文件!! Linux 系統中的文件或目錄的屬性主要包括:索引節點(inode).文件類型.權限屬性.鏈接數.所歸屬的用戶和用戶組.最近修改時間等內容: 下面我們看一下執行ls- lhi的結果: [[email protected] oldboy]# ls -lhi     (-h 以人可讀的檔案大小方式呈現) total 28K 394661 drwxr-xr-x. 3 root root 4.0K Jul 10 12:4

老男孩老師課程學習筆記----linux目錄特點

linux 目錄的特點 1./根是所有目錄的頂點 2.目錄結構像一顆倒掛的樹 3.目錄和磁盤分區默認是沒有關聯的 4./根下不同的目錄可能會對應不同的分區和磁盤 5.所有的目錄都是按照一定的類別有規律的組織和命名的 linux裡設備如果不掛載是看不到入口的,類似沒有窗戶沒門的監獄 如果希望設備被訪問,就必須給這個設備一個入口 這個入口就叫作掛載點,掛載點的表現實質是一個目錄 mount 光驅也是一種設備 ---> cdrom mount /dev/cdrom /mnt / 第一塊盤 系統程序 /

老男孩老師課程學習筆記----第一階段Linux命令行總結

~相信自己,勤奮努力,不斷總結!~ 1.mkdir make directorys 創建目錄   例子: mkdir /data 在根/下創建data目錄   -p 遞歸創建目錄 例子: [[email protected] /]# mkdir -p /oldboy/test/a/b/c/d   (-p 遞歸創建目錄) [[email protected] /]# tree /oldboy/(如果tree沒有,可以yum install tree -y) /oldboy/ └── test   

老男孩老師課程學習筆記----ip端口協議 簡單敘述

互聯網上的計算機 都會有一個唯一的32位元的地址, ip地址 我們訪問服務器,就必須透過這個ip地址 局域網也有預留的ip地址 192/10/172開頭.局域網的ip地址也是唯一的 NAT模式,電腦宿主機的ip在局域網是唯一的,選擇的NAT模式創件虛擬機,虛擬機就是一個新的局域網(私有網路). 老師的機器ip是192.168.33.128 端口的簡單概念 , 192.168.33.128 代表一台主機,但是主機上可能會有許多的服務, 一台主機上的不同服務功能,就是透過端口區分,然後讓外部人員訪問

FPGA學習筆記(貳)--- 流水燈

平臺:FPGA黑金开发板 AX301 開發環境:Quartus Prime Version 17.0.0 Build 595 04/25/2017 Standard Edition 引脚配置:鼠標托拉 Node Name 項到引脚圖即可 注意事項新建工程:Set Up Top-Level Entity 名字要對應 注意事項引脚復用:Assignments-->Device-->Device and Pin Options...-->Dual-Purpose pins-->nCEO

老男孩老師課程學習筆記----第一階段 硬盤分配

硬盤使用前,  一般要分區, 格式化(創建文件系統) ------>存放數據 房子使用前,  一般要隔段, 裝修.買家具   ------->住人 主分區.擴展分區.邏輯分區 主分區+擴展分區的數量<=4  ,其中一個主分區可以用一個擴展分區替代,擴展分區最多只能有一個 擴展分區不能直接使用,還需要在上面創建邏輯分區,邏輯分區可以有很多個 主分區+擴展分區 編號只能1-4 , 邏輯分區的編號只能從5開始 1.常規分區: 數據不是特別重要的業務(集群的某個節點) /boot 引導分區 20