c++之旅——第四彈

大家好啊,這里是c++之旅第三彈,跟隨我的步伐來開始這一篇的學習吧!

如果有知識性錯誤,歡迎各位指正!!一起加油!!

創作不易,希望大家多多支持哦!

本篇文章的主要內容有:學習C語言面向過程,C++面向對象,以及類和對象的使用

一,面向過程:

1.c語言編程就是一個面向過程的編程。它遵循一個“從上往下”的過程式程序設計方式

2.用面向過程的方式解決問題的思路:

首先提出問題,分析問題的處理流程,將大問題分解成小問題,如果小問題比較復雜,那么就繼續的分解為更小的問題,然后解決這些一個一個的小問題來解決大問題,最后解決所有的問題(做好這一步,做下一步,直到做完所有)。

面向過程強調的是功能行為,以函數為最小單位,考慮怎么做

3.優缺點:

(1)優點:

、程序結構簡單

、把問題拆分進而實現簡單化

、使我們對整個邏輯結構清楚明了

(2)缺點:

、數據和操作往往是分離的

、數據不具有封裝性(由于數據是公開的,若有其他人因失誤改自己的數據的話,會影響自己的進展)

、多人協作開發時,不清楚別人的邏輯(導致只能一個一個按順序做,無法實現同時開展工作,不利于多人協作開發)

二,面向對象:

1.面向對象的概念:

面向對象是相對于面向過程而言的。面向對象的程序設計是面向過程的繼承和發展,程序對現實世界的抽象和描述,它認為現實世界是由對象組成的,無論大小,萬物皆對象。

對象在程序中抽象為兩個部分:① 描述對象的狀態或者屬性的數據(變量)② 描述對象的行為或者功能的方法(函數)

2.用面向對象的方式解決問題的思路:

(1)、根據問題的需要,選擇問題所對應現實世界中的實體

(2)、從實體中找到解決問題的相關的屬性和功能,這些屬性和功能就形成了概念中的類

(3)、把概念中的類用計算機語言進行描述,形成計算機世界中類的定義,也就是使用某種編程語言,實現該類

(4) 、通過該類創建對象來解決問題

3.面向對象的特點:

(1)、封裝性:將數據和行為結合在一起共同來表達一個數據(可以使各個對象模塊相對分離,更有利于代碼的維護和修改)

(2)、繼承:可以使代碼的擴展性好,有利于后期基于前期代碼的擴展功能,即支持代碼重用

(3)、多態:實現同一個東西在不同情況下實現不同操作

(4)、“高內聚、低耦合”:各模塊相對分離,可以通過上一層來進行各模塊間的連接或者用一個連接各模塊的模塊來實現模塊間的連接

三,類:

1.類的介紹:

類是一種用戶自定義數據類型,可以看作是 C 語言中結構體的升級版。類是由數據加功能構成的,也就是把變量和函數綁定在一起

2.定義方式:(和結構體類似)

class類名

{

訪問屬性:

類中成員,可以定義變量或函數

};

通過類定義的變量我們稱之為對象

3.如何進行類的定義:

(1)、考慮類的目的

(2)、考慮類的屬性和方法

(3)、考慮屬性和方法的訪問權限

(4) 、考慮類之間的關系和依賴

4.類的成員的訪問屬性:

(1)、訪問屬性關鍵字:

public:公有屬性

protected:保護屬性

private:私有屬性

(2)、屬性解釋:

公有屬性:類外和類中都可以被直接訪問,類外通過對象訪問

保護屬性:類中及派生類中可以被直接訪問 , 類外需要通過對象調用接口(實際上就是公有屬性的函數)訪問

私有屬性:只有在類中才能被訪問 , 類外需要通過對象調用接口訪問

類中從有屬性開始到下一個屬性開始(若無下一個訪問屬性,就是到結尾處)都是上一個屬性的控制范圍,其中屬性設置的個數是不限的,只不過不可以設置在成員函數里面

5.類中成員訪問:(以下示例是訪問公有屬性下的函數,所以不會報錯,如果是直接這樣訪問里面私有屬性的變量數據,則會報錯)

(1)、類對象通過“ .”訪問成員:

student stu;

stu.fun();

(2)、類指針通過“->”訪問成員:

student *p=new student;

p->fun();

6.c++中結構體和類的區別:

(1)、結構體的默認訪問屬性是公有,類是私有。

(2)、類中能寫的結構體里也能寫

(3)、結構體一般用于定義數據這樣的類型,比如矩陣之類的(里面一般不定義函數);而類則一般用于定義實體類型(有數據也有相應操作(函數))

四,實際運用時對類的使用:

1.一般將類定義在頭文件中,該頭文件中一般寫有類總體,類里面定義的變量以及函數的聲明,函數的定義寫在同名的源文件中

使用這種函數定義和聲明在不同文件中時記得要寫明類名(在函數名前),相當于命名空間類似的操作:

分文件操作舉例:

people.h頭文件中的內容:

#pragma onceclass CPeople{int x, y;public:void setPoint(int px, int py);int getX()//直接返回這種簡單函數就不必分文件編寫了{return x;}int getY()//直接返回這種簡單函數就不必分文件編寫了{return y;}};

同名源文件中的內容:

#include "people.h"//上面頭文件叫people.hvoid CPeople::setPoint(int px, int py){x = px;y = py;}

2.#pragma once:寫在頭文件開頭,用于表示該頭文件只引用一次(c++寫法),C語言中用#ifndef來只導一次

3.程序運行的過程:

使用了分文件編寫了,那么現在來了解一下程序在包含頭文件時的執行過程:

(1),先是預處理(宏替換和引用頭文件),引用頭文件的目的是包含頭文件中的內容,使頭文件和源文件一起進行編譯過程(頭文件都是伴隨著源文件來進行編譯的而不是獨立編譯)

(2),編譯:生成.obj二進制目標文件(是源文件生成的,頭文件不會生成,頭文件對應的定義函數的源文件也是可以生成的),因為.obj文件有大小,頭文件里面是類類型的定義和函數的聲明,是沒有大小的,所以不可以生成有內存的文件

(3),鏈接:將.obj文件分區塊進行拷貝,拷貝至一起,鏈接形成一個.exe可執行文件

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

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

相關文章

如何對比 MySQL 主備數據的一致性?

隨著業務范圍的擴大,很多企業為了保障核心業務的高可用性,選擇了 MySQL 主從架構,這一套方案通常具備主備數據同步、數據備份與恢復、讀寫分離、高可用切換等特性,是一種相當成熟可靠的數據庫架構方案。然而這套方案在特定情況下可…

Redis小白入門教程

Redis入門教程 1. Redis入門1.1 Redis簡介1.2 Redis服務啟動與停止1.2.1 Redis下載1.2.2 服務啟動命令1.2.3 客戶端連接命令1.2.4 修改Redis配置文件 2. Redis數據類型2.1 五種常用數據類型介紹2.1.1 字符串操作命令2.1.2 哈希操作命令2.1.3 列表操作命令2.1.4 集合操作命令2.1…

雙周回顧#006 - 這三個月

斷更啦~~ 上次更新時間 2023/11/23, 斷更近三個月的時間。 先狡辯下,因為忙、著實忙。因為忙,心安理得給斷更找了個借口,批評下自己~~ 這三個月在做啥?跨部門援助,支援公司互聯網的 ToC 項目,一言難盡。 …

智能時代:人工智能引領未來創新

智能時代:人工智能引領未來創新 1. 人工智能的定義與特點 人工智能(Artificial Intelligence,AI)是指模擬、延伸和擴展人類智能的理論、方法、技術及應用系統的一門交叉學科。其特點包括學習能力、推理能力、感知能力和交互能力…

【C語言】InfiniBand 驅動mlx4_ib_init和mlx4_ib_cleanup

一、中文講解 這兩個函數是Linux內核模塊中對于Mellanox InfiniBand 驅動程序初始化和清理的函數。 mlx4_ib_init()函數是模塊初始化函數,使用__init宏標注,表示該函數只在模塊加載時運行一次。 函數執行的步驟如下: 1. 通過alloc_ordered_w…

數據結構——lesson5棧和隊列詳解

hellohello~這里是土土數據結構學習筆記🥳🥳 💥個人主頁:大耳朵土土垚的博客 💥 所屬專欄:數據結構學習筆記 💥對于順序表鏈表有疑問的都可以在上面數據結構的專欄進行學習哦~感謝大家的觀看與…

ElasticSearch開篇

1.ElasticSearch簡介 1.1 ElasticSearch(簡稱ES) Elasticsearch是用Java開發并且是當前最流行的開源的企業級搜索引擎。能夠達到實時搜索,穩定,可靠,快速,安裝使用方便。 1.2 ElasticSearch與Lucene的關…

Angular項目升級的一般步驟?

升級Angular項目是一個重要的任務,可以帶來性能改進、新功能和安全性增強等好處。以下是升級Angular項目的一般步驟: 1、備份項目文件: 在進行升級之前,務必對整個項目進行備份,以防意外情況發生。 2、查看當前版本&…

如何快速遷移其他云服務器中的網站數據到騰訊云輕量應用服務器中?教你使用寶塔Linux面板遷移網站

要快速遷移其他云服務器中的網站數據到騰訊云輕量應用服務器中,可以遵循以下步驟: 準備遷移前的工作:首先,確保你已經有了從其他云服務器到騰訊云輕量應用服務器的數據備份。這一步是為了在遷移過程中避免數據丟失或損壞。 使用寶…

模擬器抓HTTP/S的包時如何繞過單向證書校驗(XP框架)

模擬器抓HTTP/S的包時如何繞過單向證書校驗(XP框架) 逍遙模擬器無法激活XP框架來繞過單向的證書校驗,如下圖: ?? 解決辦法: 安裝JustMePlush.apk安裝Just Trust Me.apk安裝RE管理器.apk安裝Xposedinstaller_逍遙64位…

智能邊緣小站 CloudPond(低延遲、高帶寬和更好的數據隱私保護)

智能邊緣小站 CloudPond(低延遲、高帶寬和更好的數據隱私保護) 邊緣小站的主要功能是管理用戶在線下部署的整機柜設施,一個邊緣小站關聯一個華為云指定的區域和一個用戶指定的場地,相關的資源運行狀況監控等。 邊緣計算 邁入5G和AI時代,新…

利用redis實現秒殺功能

6、秒殺優化 這個是 圖靈 的redis實戰里面的一個案例 6.1 秒殺優化-異步秒殺思路 我們來回顧一下下單流程 當用戶發起請求,此時會請求nginx,nginx會訪問到tomcat,而tomcat中的程序,會進行串行操作,分成如下幾個步驟…

基于單片機的紅外遙控解碼程序設計與實現

摘要:該文介紹基于士蘭半導體芯片(SC6122)的紅外發射遙控器,通過單片機解碼程序,實現紅外遙控信號的解碼和接收。紅外接收頭與單片機特定的引腳連接,通過設置單片機定時計數器,采樣來自紅外接收頭的高、低電平寬度解碼遙控信號。該解碼程序設計主要應用在LED數碼顯示控制…

電機的極數和槽數,機械角度和電角度,霍爾IC,內外轉子

什么是電機的極數和槽數? 【第7集】②?正弦波驅動的轉矩脈動、正弦電流的時序和相位變化、超前角控制(超前角調整)、正弦波驅動的各種波形 - 電源設計電子電路基礎電源技術信息網站_羅姆電源設計R課堂 (rohm.com.cn) 下面為您介紹表示電機…

supervisor進程管理器-supervisord管理hyperf項目

Supervisor安裝 # 安裝 epel 源,如果此前安裝過,此步驟跳過 yum install -y epel-release # 安裝supervisor yum install -y supervisor # 設置supervisor開機自啟動 systemctl enable supervisord # 啟動supervisord服務 systemctl start supervisord…

新概念英語第二冊(72)

【New words and expressions】生詞和短語(7) racing n. 競賽 per prep. 每 Utah n. 猶他(美國州名) horsepower n. 馬力…

Java虛擬機(JVM)從入門到實戰【上】

Java虛擬機(JVM)從入門到實戰【上】,涵蓋類加載,雙親委派機制,垃圾回收器及算法等知識點,全系列6萬字。 一、基礎篇 P1 Java虛擬機導學課程 P2 初識JVM 什么是JVM Java Virtual Machine 是Java虛擬機。…

3.2日-線性模型,基礎優化方法,線性回歸從零開始實現

3.2日-線性模型,基礎優化方法,線性回歸從零開始實現 1線性模型衡量預估質量訓練數據總結2基礎優化方法3 線性回歸從零開始實現 1線性模型 衡量預估質量 訓練數據 總結 2基礎優化方法 梯度下降是一種優化算法,常用于機器學習和深度學習中&…

autojs Intent跳轉申請忽略電池優化頁面 和判斷是否已加入忽略優化白名單

//打開電池優化申請 判斷是否加入白名單 importClass(android.os.PowerManager); // importClass(android.Settings) //安卓setting 中有設置界面的各種activity var pm context.getSystemService(context.POWER_SERVICE);if (!pm.isIgnoringBatteryOptimizations(currentPa…

進程的信號

目錄 信號(signal)入門 技術應用角度的信號 注意 用kill -l命令可以察看系統定義的信號列表 信號處理常見方式概覽 產生信號 1.通過終端(鍵盤)按鍵產生信號 signal函數 2. 調用系統函數向進程發信號 kill 函數 raise 函數 3.由軟件條件產生的信號 alarm 函數 4.硬…