類與對象(入門)

?

目錄

?

1.前言

2.類的引入

3.類的定義

4.類的訪問限定符及封裝

4.1 訪問限定符

4.2 封裝

5.類的作用域

6.類的實例化

7.?結構體內存對齊規則

8.this指針

8.1 this指針的引出

8.2 this指針的特性


1.前言

C++ 基于面向對象 的, 關注 的是 對象 ,將一件事情拆分成不同的對象,靠對象之間的交互完
成。

2.類的引入

C 語言結構體中只能定義變量,在 C++ 中,結構體內不僅可以定義變量,也可以定義函數。 比如:
之前在數據結構初階中,用 C 語言方式實現的棧,結構體中只能定義變量 ;現在以 C++ 方式實現,
會發現 struct中也可以定義函數,而結構體的定義, C++ 中更喜歡用 class 來代替

3.類的定義

class className
{
// 類體:由成員函數和成員變量組成
}; ? // 一定要注意后面的分號
class 定義類的 關鍵字, ClassName 為類的名字, {} 中為類的主體,注意 類定義結束時后面
號不能省略
類體中內容稱為 類的成員: 類中的 變量 稱為 類的屬性 成員變量 ; 類中的 函數 稱為 類的方法 或者
成員函數
類的兩種定義方式:
1. 聲明和定義全部放在類體中,需注意:成員函數如果 在類中定義 ,編譯器可能會將其當成
聯函數 處理。
2. 類聲明放在 .h 文件中,成員函數定義放在 .cpp 文件中,注意: 成員函數名前需要加類名 ::
一般情況下,更期望采用第二種方式。

4.類的訪問限定符及封裝

4.1 訪問限定符

C++ 實現封裝的方式: 用類將對象的屬性與方法結合在一塊,讓對象更加完善,通過訪問權限選
擇性的將其接口提供給外部的用戶使用
【訪問限定符說明】
1. public 修飾的成員在類外可以直接被訪問
2. protected private 修飾的成員在類外不能直接被訪問 ( 此處 protected private 是類似的 )
3. 訪問權限 作用域從該訪問限定符出現的位置開始直到下一個訪問限定符出現時為止
4. 如果后面沒有訪問限定符,作用域就到 } 即類結束。
5. class 的默認訪問權限為 private struct public( 因為 struct 要兼容 C)
注意:訪問限定符只在編譯時有用,當數據映射到內存后,沒有任何訪問限定符上的區別

4.2 封裝

面向對象的三大特性: 封裝、繼承、多態
在類和對象階段,主要是研究類的封裝特性,那什么是封裝呢?
封裝:將數據和操作數據的方法進行有機結合,隱藏對象的屬性和實現細節,僅對外公開接口來
和對象進行交互。
封裝本質上是一種管理,讓用戶更方便使用類 。比如:對于電腦這樣一個復雜的設備,提供給用
戶的就只有開關機鍵、通過鍵盤輸入,顯示器, USB 插孔等,讓用戶和計算機進行交互,完成日
常事務。但實際上電腦真正工作的卻是 CPU 、顯卡、內存等一些硬件元件。
對于計算機使用者而言,不用關心內部核心部件,比如主板上線路是如何布局的, CPU 內部是如
何設計的等,用戶只需要知道,怎么開機、怎么通過鍵盤和鼠標與計算機進行交互即可。因此
算機廠商在出廠時,在外部套上殼子,將內部實現細節隱藏起來,僅僅對外提供開關機、鼠標以
及鍵盤插孔等,讓用戶可以與計算機進行交互即可
C++ 語言中實現封裝,可以 通過類將數據以及操作數據的方法進行有機結合,通過訪問權限來
隱藏對象內部實現細節,控制哪些方法可以在類外部直接被使用

5.類的作用域

類定義了一個新的作用域 ,類的所有成員都在類的作用域中 在類體外定義成員時,需要使用 ::
作用域操作符指明成員屬于哪個類域。

6.類的實例化

用類類型創建對象的過程,稱為類的實例化
1. 類是對對象進行描述的 ,是一個 模型 一樣的東西,限定了類有哪些成員,定義出一個類 并沒
有分配實際的內存空間 來存儲它;比如:入學時填寫的學生信息表,表格就可以看成是一個
類,來描述具體學生信息。
類就像謎語一樣,對謎底來進行描述,謎底就是謎語的一個實例。
謎語: " 年紀不大,胡子一把,主人來了,就喊媽媽 " 謎底:山羊
2. 一個類可以實例化出多個對象, 實例化出的對象 占用實際的物理空間,存儲類成員變量
3. 做個比方。 類實例化出對象就像現實中使用建筑設計圖建造出房子,類就像是設計圖 ,只設
計出需要什么東西,但是并沒有實體的建筑存在,同樣類也只是一個設計,實例化出的對象
才能實際存儲數據,占用物理空間

7.?結構體內存對齊規則

如何計算類對象的大小

1. 第一個成員在與結構體偏移量為 0 的地址處。
2. 其他成員變量要對齊到某個數字(對齊數)的整數倍的地址處。
注意:對齊數 = 編譯器默認的一個對齊數 與 該成員大小的較小值。
VS 中默認的對齊數為 8
3. 結構體總大小為:最大對齊數(所有變量類型最大者與默認對齊參數取最小)的整數倍。
4. 如果嵌套了結構體的情況,嵌套的結構體對齊到自己的最大對齊數的整數倍處,結構體的整
體大小就是所有最大對齊數(含嵌套結構體的對齊數)的整數倍。

8.this指針

8.1 this指針的引出

我們先來定義一個日期類 Date
class Date
{
public :
void Init ( int year , int month , int day )
{
_year = year ;
_month = month ;
_day = day ;
}
void Print ()
{
cout << _year << "-" << _month << "-" << _day << endl ;
}
private :
int _year ; ? ? //
int _month ; ? ? //
int _day ; ? ? ? //
};
int main ()
{
Date d1 , d2 ;
d1 . Init ( 2022 , 1 , 11 );
d2 . Init ( 2022 , 1 , 12 );
d1 . Print ();
d2 . Print ();
return 0 ;
}
對于上述類,有這樣的一個問題:
Date 類中有 Init Print 兩個成員函數,函數體中沒有關于不同對象的區分,那當 d1 調用 Init
數時,該函數是如何知道應該設置 d1 對象,而不是設置 d2 對象呢?
C++ 中通過引入 this 指針解決該問題,即: C++ 編譯器給每個 非靜態的成員函數 增加了一個隱藏
的指針參數,讓該指針指向當前對象 ( 函數運行時調用該函數的對象 ) ,在函數體中所有 成員變量
的操作,都是通過該指針去訪問。只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編
譯器自動完成

8.2 this指針的特性

1. this 指針的類型:類類型 * const ,即成員函數中,不能給 this 指針賦值。
2. 只能在 成員函數 的內部使用
3. this 指針本質上是 成員函數 的形參 ,當對象調用成員函數時,將對象地址作為實參傳遞給
this 形參。所以 對象中不存儲 this 指針
4. this 指針是 成員函數 第一個隱含的指針形參,一般情況由編譯器通過 ecx 寄存器自動傳
遞,不需要用戶傳遞

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35825.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35825.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35825.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Spring】核心容器——依賴自動裝配

Spring容器根據bean所依賴的資源在容器中自動查找并注入bean的過程叫做自動裝配自動裝配的方式 1、按類型 2、按名稱&#xff08;耦合性較高&#xff09; 3、按構造方法 自動裝配特點 1、自動裝配用于對引用類型進行依賴注入&#xff0c;不能對簡單類型進行操作 2、自動裝配的…

多元最短路(Floyd)

是一個基于動態規劃的全源最短路算法。它可以高效地求出圖上任意兩點之間的最短路 時間復雜度 O(n^3) 狀態轉移方程 f[i][j]min(f[i][j],f[i][k]f[k][j]) 核心代碼 void floyd(){for(int k1;k<n;k)for(int i1;i<n;i)for(int j1;j<n;j)s[i][j]min(s[i][j],s[i][k…

Vue前端 更具router.js 中的meta的roles實現路由衛士,實現權限判斷。

參考了之篇文章 1、我在登陸時獲取到登錄用戶的角色名roles&#xff0c;并存入sessionStorage中&#xff0c;具體是在login頁面實現&#xff0c;還是在menu頁面實現都可以。在menu頁面實現&#xff0c;可以顯得登陸快一些。 2、編寫router.js&#xff0c;注意&#xff0c;一個…

Spring 事務詳解

目錄 一、概述二、事務的特性&#xff08;ACID&#xff09;三、Spring 的事務管理3.1 編程式事務管理3.2 編程式事務管理 四、Spring 事務管理接口及其定義的屬性4.1 PlatformTransactionManager:事務管理接口4.2 TransactionDefinition:事務屬性4.3 TransactionStatus:事務狀態…

【基礎類】—前后端通信類系統性學習

一、什么是同源策略及限制 同源策略限制從一個源加載的文檔或腳本如何與來自另一個源的資源進行交互。這是一個用于隔離潛在惡意文件的關鍵的安全機制。源&#xff1a;協議、域名和端口&#xff0c; 默認端口是80 三者有一個不同&#xff0c;即源不同&#xff0c;就是跨域 ht…

Stable Diffusion+Temporal-kit 半虛半實應用

1.先下載temporal-kit,重啟webui 2.下載好ffmpeg,配置好環境,下載Ebsynth 3.準備好你需要的視頻,拖到預處理視頻位置 4.填寫參數,點解保存設置,然后并點擊生成,會生成到目標文件夾的input位置 5.然后拉出input文件夾里面你想切換成處理的幀圖片,然后填寫prompt查看效…

中國省級、城市-數字經濟創新創業、分項指數(2010-2020年)

一、數據介紹 數據名稱&#xff1a;中國省級、城市-數字經濟創新創業、分項指數 數據年份&#xff1a;2010-2020年 數據范圍&#xff1a;31省、336個城市 數據來源&#xff1a;北大企業大數據研究中心 二、參考文獻 參考文獻&#xff1a; 戴若塵,王艾昭,陳斌開.中國數字…

Win10使用Guest和空密碼訪問共享的完整步驟

目錄 前言 啟動Guest 給予Guest網絡權限 允許空密碼登陸 啟用不安全的來并登陸 總結 前言 我們經常需要使用空密碼和guest賬戶訪問Windows共享&#xff0c;因為某些設備不支持輸入密碼等&#xff0c;那么該如何設置呢&#xff0c;因為步驟比較固定而且繁瑣&#xff0c;于…

Python小白入門:文件、異常處理和json格式存儲數據

這里寫自定義目錄標題 所用資料 一、從文件中讀取數據1.1 讀取整個文件1.2 文件路徑1.3 逐行讀取1.4 創建一個包含文件各行內容的列表1.5 使用文件的內容1.6 包含一百萬位的大型文件1.7 圓周率值中包含你的生日嗎練習題 二、寫入文件2.1 寫入空文件2.2 寫入多行2.3 附加到文件練…

Maven 生成(打包)帶有依賴的可以直接執行的一個 jar 包

在pom中增加如下內容 <build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><archive><manifest><mainClass>com.example.xxx.YourClass</mainClass></manifest></…

酷開系統丨酷開會員,帶你解鎖K歌新姿勢

不管時代怎么變化&#xff0c;K歌這項娛樂活動始終深受人們的喜愛。不知道你有沒有遇到過這種情況&#xff1a;周末在家宅了一天&#xff0c;突然心血來潮想去KTV唱歌&#xff0c;但奈何外面過于悶熱實在不想出門&#xff0c;可在手機上唱歌又不過癮&#xff0c;讓人很是苦惱……

tomcat入門介紹

tomcat官網下載8.5.9版本&#xff0c;官網地址&#xff1a;https://tomcat.apache.org/download-80.cgi 下載完成后直接解壓即可 tomcat目錄 解壓后&#xff0c;可以看到tomcat有以下目錄 /bin - 啟動、關閉和其他腳本 *.sh后綴是linux下的腳本文件*.bat后綴windows系統下的…

繪畫AI工具的介紹與使用----強到離譜-2023年必備免費好用的AI工具

一.繪畫AI www.seaart.ai 這個是網站地址&#xff0c;進去之后直接注冊登錄即可&#xff0c;幾乎都是免費使用&#xff0c;不用擔心是否要VIP 點擊網站進入之后登錄&#xff0c;然后進入主頁面&#xff0c;一張圖片給你介紹清楚主頁 我會根據菜單欄來給大家演示&#xff0c;首…

web會話跟蹤以及JWT響應攔截機制

目錄 JWT 會話跟蹤 token 響應攔截器 http是無狀態的&#xff0c;登錄成功后&#xff0c;客戶端就與服務器斷開連接&#xff0c;之后再向后端發送請求時&#xff0c;后端需要知道前端是哪個用戶在進行操作。 JWT Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而…

Unity特效總覽

一、粒子 Unity中的粒子組件叫做Particle System。 粒子系統顧名思義&#xff0c;與“微粒”有關。粒子系統會生成和發射很多粒子&#xff0c;通過控制粒子的生成數量、大小、角度、速度、貼圖和顏色等眾多屬性&#xff0c;可以實現或真實或炫酷的各種效果。其中&#xff0c;…

leetcode做題筆記76最小覆蓋子串

給你一個字符串 s 、一個字符串 t 。返回 s 中涵蓋 t 所有字符的最小子串。如果 s 中不存在涵蓋 t 所有字符的子串&#xff0c;則返回空字符串 "" 。 注意&#xff1a; 對于 t 中重復字符&#xff0c;我們尋找的子字符串中該字符數量必須不少于 t 中該字符數量。如果…

【Unity】VS Code 沒有智能提示 Unity 中的類

正常來說&#xff0c;VS Code中會對部分輸入類名進行提示&#xff0c;如下圖所述 假如你從Unity 中進入 VS Code后發現沒有提示相關 Unity的類&#xff0c;可能是 Unity 中 有關于 VS Code的相關Package 沒有跟著 VS Code升級到最新版本。 點擊Unity Windows 下拉框中的 Pac…

如何在電力行業運用IPD?

電力行業是國民經濟眾多壟斷行業中較早實施改革的行業之一。近幾年我國電力行業保持著較快的發展速度&#xff0c;也取得了很大的成績&#xff0c;發電機容量和發電量居世界首位。2015-2020年&#xff0c;全國發電量不斷攀升。 電力是以電能作為動力的能源。電力的發現和應用掀…

簡繪ChatGPT支持Midjourney繪圖 支持stable diffusion繪圖

簡繪支持Midjourney繪圖和stable diffusion繪圖。 這意味著簡繪具備Midjourney繪圖和stable diffusion繪圖功能的支持。

生信豆芽菜-單基因表達比較

網址&#xff1a;http://www.sxdyc.com/panCancerExpCom 該工具主要用于查看單基因在泛癌的癌組織和癌旁組織中表達比較&#xff0c;可以只選擇TCGA數據庫&#xff0c;也可以選擇TCGAGTEx數據庫&#xff08;GTEx數據庫&#xff0c;存放了正常組織全基因的表達譜&#xff09; …