C++系列——————類和對象(上)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 前言
  • 一、面向對象的三大特征
  • 二、類的引入
    • 2.1類的定義
  • 三.類的訪問限定符
    • 3.1訪問限定符的介紹
    • 3.2.訪問限定符的使用
  • 四、類的作用域
  • 五、類的實例化
  • 六、類對象模型
    • 6.1 如何計算類對象的大小
  • 總結


前言

在學習C語言你可能聽到過,C語言是面向過程的語言,關注的是過程,分析出求解問題的步驟,通過函數調用逐步解決問題
C++是基于面向對象的,關注的是對象,將一件事情拆分成不同的對象,靠對象之間的交互完成

一、面向對象的三大特征

c++面向對象的語言,同樣的具備面向對象的特性:分裝、繼承、多態

特性一:封裝
將數據和操作數據的方法進行有機結合,隱藏對象的屬性和實現細節,僅對外公開接口來和對象進交互。
(簡單來說,就好比我們在學習c語言時使用的一些函數如:printf函數,我們在使用它的時候并不知道它的底層是怎么實現的)
特性二:繼承

繼承是一個進程,通過一個進程,一個對象可以獲得另一個對象的屬性(數據和函數),且可以想起加入屬于自己的方法和屬性。用這種方法可以自動的對一個類中提供另一個類的成員和數據結構。當A類被另B類繼承,A類可以稱之為基類或者父類;B類被稱之為派生類或者子類。
特性三:多態

如果幾個相似而不完全相同的對象,當對他發出同一個消息時,他們的反映各不相同,執行不同的操作。這種現象叫做多態現象。在C++中多態是指由繼承而產生的相關的不同的類,其對象會對同一消息做出不同的相應。他能增加程序的靈活性。

二、類的引入

   C語言中,結構體中只能定義變量,在C++中,結構體內不僅可以定義變量 
,也可以定義函數  。

在學習C語言時,我們并沒有聽到類的概念,c++是以C語言為基礎,對其進行完善和拓展的,而c++是兼容C語言的,所以在c++中定義類的方式有兩種。

struct classname
{//成員變量//成員函數
};class classname
{//成員變量//成員函數
};
        當然以上兩種方式存在差別,等一下我們會展開介紹。

2.1類的定義

代碼如下(示例)
也可以將關鍵字struct替換為關鍵字class(可以將class看作struct的升級版)
也可以將關鍵字struct替換為關鍵字class
struct為定義類的關鍵字,stack為類的名字,{}中為類的主體,注意類定義結束時后面分號不能省略。

類體中內容稱為類的成員:類中的變量稱為類的屬性或成員變量; 類中的函數稱為類的方法或者成員函數。

這里需要注意,如果類的成員函數聲明和定義都在類的內部,可能會被編譯器當作內斂函數來處理。

  上面結構體的定義,在C++中更喜歡用class來代替 

三.類的訪問限定符

3.1訪問限定符的介紹

成員訪問修飾符: 描述了類成員的訪問控制,即所能使用的一個范圍

公有的public:沒有訪問限制,其他類可以訪問公有成員變量和方法。

保護的protected:只能在當前類和繼承該類的子類中訪問,受保護成員變量和方法對于其他類不可見。

私有的private :只能在當前類中訪問,其他類無法直接訪問。
在上面我們提到,雖然c++支持使用關鍵字struct和class來創建類,但是這兩種方法還是會存在差異:
對于使用關鍵字class創建的類,其默認成員函數及成員變量是私有的(只允許該種類創建出來的對象訪問),若是想進行訪問,必須使用關鍵字public來修飾。

在這里插入圖片描述

使用關鍵字struct創建的類,默認成員變量及成員函數是共有的,可以對它直接訪問,這里就不演示了。

3.2.訪問限定符的使用

訪問限定符的作用域,是從使用第一個訪問限定符開始,直到出現下一個訪問限定符為止,若是此后未再出現訪問限定符,則生效區域直到類的結束。
示例:
在這里插入圖片描述

四、類的作用域

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

示例:(聲明定義分離)

class Person{public:void PrtPerson();private:char _name[20];char _gender[3];int  _age;}; 
// 這里需要指定PrtPerson是屬于Person這個類域
void Person::PrtPersonInfo(){cout<<_name<<" "_gender<<" "<<_age<<endl;}

還有一種靜態變量值的缺省,也需要用到,這個以后在介紹,感興趣的可以搜搜。

五、類的實例化

用類類型創建對象的過程,稱為類的實例化

  1. 類只是一個模型一樣的東西,限定了類有哪些成員,定義出一個類并沒有分配實際的內存空間來存儲它
  2. 一個類可以實例化出多個對象,實例化出的對象 占用實際的物理空間,存儲類成員變量
  3. 做個比方。類實例化出對象就像現實中使用建筑設計圖建造出房子,類就像是設計圖,只設計出需要什么東西,但是并沒有實體的建筑存在,同樣類也只是一個設計,實例化出的對象才能實際存儲數據,占用物理空間

六、類對象模型

6.1 如何計算類對象的大小

class Stack
{
public:void Init(){int* pos;pos = nullptr;top = capacity = 0;}
private:int* a;int top;int capacity;
};

問題:類中既可以有成員變量,又可以有成員函數,那么一個類的對象中包含了什么?如何計算一個類的大小呢?
接下來我們就用上面的類展開討論
我們回想在C語言中,我們計算一個對象的大小時,會使用操作符sizeof,那么我們嘗試一下會得到什么結果:
在這里插入圖片描述
可以看到計算的結果為16,只計算了類中的成員變量,成員函數所占的空間并沒有計算。看來設計還是挺合理的,如果每用這個類型創建的一個對象,都要給它配一套成員函數,那也太浪費了。為了避免浪費,我們的C++祖師爺只保存了類中成員變量,成員函數存放在公共的代碼段(所有使用這個類創建的對象,共有一塊函數代碼)

總結

在上面我們并沒有提及結構對其的原則,大家在進行類大小計算時,要將其考慮在內!!!!!

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

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

相關文章

JavaScript的內存管理機制

No.內容鏈接1Openlayers 【入門教程】 - 【源代碼示例300】 2Leaflet 【入門教程】 - 【源代碼圖文示例 150】 3Cesium 【入門教程】 - 【源代碼圖文示例200】 4MapboxGL【入門教程】 - 【源代碼圖文示例150】 5前端就業寶典 【面試題詳細答案 1000】 文章目錄 一、內存…

Pipecat: 創建語音對話agent的開源框架,支持多模態!

項目簡介 pipecat 是用于構建語音&#xff08;和多模態&#xff09;對話代理的框架。諸如私人教練、會議助理、兒童講故事玩具、客戶支持機器人、攝入流程和尖刻的社交伙伴。 看看一些示例應用&#xff1a; 語音代理入門 您可以開始在本地計算機上運行 Pipecat&#xff0c;然…

Nginx(openresty) 開啟目錄瀏覽 以及進行美化配置

1 nginx 安裝 可以參考:Nginx(openresty) 通過lua結合Web前端 實現圖片&#xff0c;文件&#xff0c;視頻等靜態資源 訪問權限驗證&#xff0c;進行鑒權 &#xff0c;提高安全性-CSDN博客 2 開啟目錄瀏覽 location /file{alias /data/www/; #指定目錄所在路徑autoindex on; …

【數學不建模】賽程安排

你所在的年級有5個班&#xff0c;每班一支球隊在同一塊場地上進行單循環賽, 共要進行10場比賽. 如何安排賽程使對各隊來說都盡量公平呢. 下面是隨便安排的一個賽程: 記5支球隊為A, B, C, D, E&#xff0c;在下表左半部分的右上三角的10個空格中, 隨手填上1,2,10, 就得到一個賽程…

【機器學習】之 K-最近鄰(KNN)算法原理及實現

K-最近鄰&#xff08;K-Nearest Neighbors, KNN&#xff09;是一種簡單且直觀的監督學習算法&#xff0c;廣泛應用于分類和回歸任務。本文將介紹KNN算法的基本概念、實現細節以及Python代碼示例。 基本概念 KNN算法的核心思想是&#xff1a;給定一個測試樣本&#xff0c;根據…

上位機圖像處理和嵌入式模塊部署(f407 mcu vs f103)

【 聲明&#xff1a;版權所有&#xff0c;歡迎轉載&#xff0c;請勿用于商業用途。 聯系信箱&#xff1a;feixiaoxing 163.com】 對于一部分嵌入式場景來說&#xff0c;f103其實已經足夠了&#xff0c;特別是要求不高的低速場合。如果開發的代碼比較多&#xff0c;還可以選用更…

黑馬es集群

1、為什么要做es集群 單機的elasticsearch做數據存儲&#xff0c;必然面臨兩個問題:海量數據存儲問題、單點故障問題 海量數據存儲問題:將索引庫從邏輯上拆分為N個分片(shard)&#xff0c;存儲到多個節點 單點故障問題:將分片數據在不同節點備份(replica) 2、搭建es集群 1、用…

Python 數據庫編程(Mysql)

目錄 知識點 游標 提交事務 檢索數據 回滾 關閉 增刪改查 查詢 新增 修改 刪除 回滾的用法 知識點 游標 在Python中&#xff0c;數據庫游標&#xff08;cursor&#xff09;是用于執行SQL語句并檢索數據的對象。游標允許你在數據庫中移動并操作數據。在使用Python進…

請說明Vue的filter的理解與用法

Vue.js 的 filter 是一種特殊的功能&#xff0c;允許你在mustache插值 ({{ }}) 或 v-bind 表達式中預處理文本。然而&#xff0c;需要注意的是&#xff0c;從 Vue 2.x 開始&#xff0c;filter 已被標記為廢棄&#xff0c;并且在 Vue 3.x 中已完全移除。盡管如此&#xff0c;了解…

力扣Hot100-有效的括號(棧stack)

給定一個只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判斷字符串是否有效。 有效字符串需滿足&#xff1a; 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右括號都有一個對應的相同類型的左括…

【C++】哈希(2萬字)

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 目錄 前言 unordered系列關聯式容器 unordered_map unordered_map的文檔介紹 unordered_map的接口說明 unordered_set 底層結構 哈希概念 哈希沖突 哈希函數 哈希…

Whisper-AT:抗噪語音識別模型(Whisper)實現通用音頻事件標記(Audio Tagger)

1.概述: Whisper-AT 是建立在 Whisper 自動語音識別&#xff08;ASR&#xff09;模型基礎上的一個模型。Whisper 模型使用了一個包含 68 萬小時標注語音的大規模語料庫進行訓練&#xff0c;這些語料是在各種不同條件下錄制的。Whisper 模型以其在現實背景噪音&#xff08;如音樂…

探究 Meme 的金融與社交屬性

原文標題&#xff1a;《A Social and Financial Study of Memecoins》撰文&#xff1a;Andrew Hong編譯&#xff1a;Chris&#xff0c;Techub News 每一個市場周期都伴隨著 Meme 代幣的出現。一群人圍繞著某個 Meme 集結起來&#xff0c;暫時抬高了某個資產的價格&#xff08;從…

Github Copilot登錄賬號,完美支持chat

Github Copilot 代碼補全等功能&#xff0c;提高寫代碼的效率 https://web.52shizhan.cn/activity/copilot 登錄授權后&#xff0c;已經可以使用&#xff0c;完美。如圖

flutter 自動生成靜態資源的引用

flutter_gen庫的使用 第一步、項目yarml中dev_dependencies 新增一下flutter_gen_runner 和build_runner dev_dependencies:build_runner: nullflutter_gen_runner: null # flutter packages pub run build_runner build 第二步、新增配置信息 和(dev_dependencies 同級的) …

大話設計模式學習筆記

目錄 工廠模式策略模式備忘錄模式&#xff08;快照模式&#xff09;代理模式單例模式迭代器模式訪問者模式觀察者模式解釋器模式命令模式模板方法模式橋接模式適配器模式外觀模式享元模式原型模式責任鏈模式中介者模式裝飾模式狀態模式 工廠模式 策略模式 核心&#xff1a;封裝…

03.k8s常用的資源

3.k8s常用的資源 3.1 創建pod資源 k8s yaml的主要組成 apiVersion: v1 api版本 kind: pod 資源類型 metadata: 屬性 spec: 詳細上傳nginx鏡像文件&#xff0c;并且上傳私有倉庫里面 k8s_pod.yaml apiVersion: v1 kind: Pod metadata:name: nginxlabels:app: we…

prometheus 標簽選擇器 正則表達式 = 、=~

Prometheus expression是一種用于查詢和操作Prometheus時間序列數據的查詢語言。它具有一套豐富的函數和運算符&#xff0c;可以用于提取、聚合和轉換時間序列數據。 正則表達式在Prometheus expresion中也被廣泛使用&#xff0c;可以用于匹配和過濾時間序列。 Prometheus ex…

Tuxera Ntfs For Mac 2023的具體使用方法

大家都知道由于操作系統的原因&#xff0c;在蘋果電腦上不能夠讀寫NTFS磁盤&#xff0c;但是&#xff0c;今天小編帶來的這款tuxera ntfs 2024 mac 破解版&#xff0c;完美的解決了這個問題。這是一款在macOS平臺上使用的磁盤讀寫軟件&#xff0c;能夠實現蘋果Mac OS X系統讀寫…

CSS實驗性功能及CSS4特性

CSS4目前仍然是一個寬泛的概念,因為CSS的發展通常是通過一系列逐步完善的模塊來進行的,而不是一次性推出一個全新的“第四代”。許多所謂的“CSS4”特性實際上是正在開發或已經草案階段的CSS模塊,它們可能在未來的CSS規范中被正式采納。 選擇器4: :is() 和 :where() 偽類允…