嵌入式學習——4——c++ 結構體+類

1、數據類型

基本數據類型:char、int 、float、 double、string、bool

構造數據類型:數組、指針、結構體、共用體、枚舉、類

2、引用

引用就是 別名

數據類型 &引用名 = 同類型的變量名 (&引用符號)

 int a = 10;int &b = a;  // b引用a.  或者給a取個別名叫b

引用的目標一旦指定,就不可以改變

數組引用

 //定義一個數組int a[5] = {10,20,30,40,50};//數組指針int (*p)[5] = &a;//數組引用int (&b)[5] = a;b[2] = 900; //==   a[2] = 900

函數引用

int max(int x, int y)
{return  x>y ? x:y;
}//函數指針int (*p)(int, int) = max;cout << p(23, 78) << endl;//函數引用int (&fun)(int, int) = max;cout << fun(66, 99) << endl; // ==   max(66, 99)

當結構體中有引用成員時,如果用該結構體類型定義變量,就必須定義的同時初始化,否則報錯

當函數返回一個引用變量時

1> 該變量的生命周期要長

2> 靜態變量、 在堆區申請的變量

int &fun()  // int &num = num;
{static int num = 100; //要求返回的變量生命周期要長return num;
}int main()
{int a = fun();  return 0;
}

總結: 指針與引用的區別

指針:存儲地址的變量

引用:就是一個別名

1、初始化有區別,別名必須帶值初始化,指針不一定

2、定義指針需要申請空間,引用不需要申請空間

3、指針指向可以改變,引用不可以改變

4、引用不是數據類型,沒有引用數組以及二級引用,但是有指針數組和二級指針

3、const

const 修飾變量時,該變量不可以改變, 只讀變量

const int *p; //指針指向里的值不可變,指向可變
int * const p; //指針指向里的值可變,指向不可變
int const * const p;//都不變int a = 10;
const int b = 20;
int *pa = &a; //合法
//int *pb = &b; // 不合法
//*pb = 30;
//保存常變量地址  需要對指針加以限制
const int *pb = &b;int a = 10;
const int b = 20;
int &ppa = a; //合法
//int &ppb = b; // 不合法
//ppb = 30;
//如果想給常變量取個別名, 需要對別名(引用)加以限制
const int &ppb = b;// (ppb  常引用)

4、函數重載

4.1 概念

在同一個作用域下,兩個以上的函數,取相同的函數名,其參數的個數或者參數的類型不同,編譯器會根據實參的參數個數或類型,自動調用匹配的函數,這就是函數重載。

注意:不以返回值作為標準

int add(int x, int y)
{return x+y;
}int add(char x, char y)
{return x+y;
}string add(string x, string y)
{return x+y;
}double add(double x, double y)
{return x+y;
}

4.2 默認參數

具體的使用:如果函數調用沒有給實參,那么就使用形參的默認值。如果函數調用給了具體實參,那么就使用所傳遞的實參。

4.3 內聯函數

概念: 就是在函數前加個關鍵字 inline ---->該函數就是內聯函數。

內聯函數的要求:

1> 要求代碼量比較小,程序代碼一般不超過5行

2> 不能有復雜的語句,比如循環,分支

3> 遞歸函數不能作內聯

作用:提高代碼的運行效率 (原因:內聯函數是在編譯時展開)

內聯函數帶參宏替換的區別:

1> 內聯函數是函數調用,帶參宏是替換。

2> 內聯函數是在編譯時展開,而宏替換是在預處理時展開

4.4? 啞元

用于代碼的升級優化。

在定義函數的形參時,只定義類型,不定義形參名,在函數體中也不使用。

作用:沒有作用,占位

5、c++中的結構體

C++中的結構體和C語言中的結構體的區別:

1>C語言中的結構體在C++中依然使用

2> C++中的結構體可以有函數,而C語言中的結構體不可以。

3> C++定義結構體類型時,可以給變量賦初始值,而C語言中的結構體不可以。

4> C++中結構體,使用結構體類型定義變量時,可以省略關鍵字struct不寫。而C語言中的結構體不可以。

5> C++中的結構體中有訪問權限,而C語言中的結構體沒有訪問權限。

6> C++中的結構體有繼承,而C語言中的結構體沒有繼承。

7> C++中的結構體有特殊的成員函數,而C語言中的結構體沒有。

注意:在C++中定義結構體的結構名時,首字母大寫。

C++的結構體訪問權限:默認是public 共有權限

訪問權限:public公有 、protected受保護、private私有

6、類

6.1?概念

C++中的類是由C++中的結構體演變而來,一般有變量又有函數的構造類型,用類來完成。

只是默認訪問權限默認繼承方式以及關鍵字不同。(C++中的類和C++中的結構體區別)

結構體的關鍵字:struct

結構體的默認訪問權限:public(共有的)

結構體的默認繼承方式:public(共有的)

類的關鍵字:class

類的默認訪問權限:private(私有的)

類的默認繼承方式:private(私有的)

6.2 格式

class 類名
{public:公共的數據成員、成員函數protected:受保護的數據成員、成員函數private:私有的數據成員、成員函數
};

6.3?訪問權限的介紹

1> public: 該權限是公共的, 表示該權限下的屬性(變量)、方法(函數),可以在類內、子類、類外被訪問。

2> protected:該權限是受保護的, 表示該權限下的屬性(變量)、方法(函數), 可以在類內、子類被訪問,類外不可以被訪問。

3> private:該權限是私有的, 表示該權限下的屬性(變量)、方法(函數),只能在類內被訪問,子類、類外不可以被訪問。

6.4?封裝

面向對象:封裝、繼承、多態

類的三大屬性:封裝、繼承、多態

封裝:對數據和對數據的處理捆綁在一起的過程。

????????????????屬性? ?+? ?方法? ?=? ?封裝

?????????????(變量)(函數)

類中的內容,都可以稱為成員,成員又可以分為:數據成員、成員函數

一般類中的數據成員封裝成private權限,成員函數封裝成public權限。

練習

/*
自己封裝一個矩形類(Rect),擁有私有屬性:寬度(width)、高度(height),
定義公有成員函數:
初始化函數:void init(int w, int h)
更改寬度的函數:set_w(int w)
更改高度的函數:set_h(int h)
輸出該矩形的周長和面積函數:void show()
*/#include <iostream>using namespace std;class Rect {
private:int _width;int _height;
public:void init(int width = 1, int height = 1) {_width = width;_width = height;}void set_w(int width){_width = width;}void set_h(int height) {_height = height;}void show(){cout << "周長:" << 2*(_width+_height) << ",面積:" << _width * _height << endl;}
};int main()
{Rect rect;rect.init(10,30);rect.show();return 0;
}

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

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

相關文章

標準發布 | 反滲透和納濾水處理膜修復再利用技術要求

本文件由浙江大學、中華環保聯合會水環境治理專業委員會提出。 本文件由中華環保聯合會歸口。 本文件主編單位&#xff1a;浙江大學、河南一膜環保技術有限公司、安徽精高水處理有限公司、國能龍源環保有限公司、湖南沁森高科新材料有限公司。 本文件參編單位&#xff1a;深…

rtl8723DU移植 android4.4 4418

一、 linux 的移植。 首先編譯一遍確保沒有問題。 將驅動拷貝到 driver/net/wireless 目錄下。 使用的是&#xff1a; 改寫 makefile Kconfig 去改寫 8723 的makefile 設置menuconfig 使能固有的 庫。 使能USB部分 ieee 部分 編譯一遍 有報錯。 解決&#xff1a; …

MATLAB R2024a下載安裝

目錄 前言 下載安裝教程 資源 前言 一個很好的資源&#xff0c;我自己是一遍過了&#xff0c;非常順利&#xff0c;不說廢話&#xff0c;直接上菜。 下載安裝教程 MATLAB R2024a下載及安裝演示_嗶哩嗶哩_bilibili 資源 MATLAB R2024a網盤資源

Java對sqlserver表的image字段圖片讀取和輸出本地

Java代碼實現對sqlserver數據庫表的image字段圖片的讀取&#xff0c;和輸出存儲到本地 由于表image字段圖片存的內容是二進制值&#xff0c;如何輸出保存到本地&#xff1a; 代碼示例&#xff1a;&#xff08;注&#xff1a;連接sqlserver數據庫需配置其驅動文件&#xff09; …

Linux【工具 03】Telnet服務安裝使用(安全性較差 非特殊情況盡量不要使用)

Telnet服務安裝使用 1.說明2.安裝 1.說明 現在大多數服務器的遠程連接基本都是走的SSH協議&#xff0c;也就是常用的22端口【默認端口可以自行調整】。在升級OpenSSH的過程中要卸載老版本&#xff0c;安裝新版本&#xff0c;也就意味著升級過程中如果出現了問題&#xff0c;且…

Spring MVC 應?分層

什么是應用分層 引用分層是一種軟件開發思想 將應用程序分為N個層次每個層次負責各個職責 其中MVC是常見的設計模式這就是應用分層的具體體現 目前主流的開發方式是前后段分離后端開發工程師不再需要關注前端的實現,對此就需要分為表現層&#xff0c;數據層&#xff0c;業務邏…

FPGA DMA IP核使用指南

摘要 本文旨在介紹FPGA中DMA(Direct Memory Access)IP核的使用,包括其基本框架、測試代碼編寫以及仿真波形的分析。DMA是一種允許外圍設備直接與內存進行數據交換的技術,無需CPU的介入,從而提高了數據傳輸的效率。 1. 引言 在現代FPGA設計中,DMA IP核因其…

Day15—圖像爬蟲與簡單處理

圖像爬蟲是一種專門用于從互聯網上下載圖像的網絡爬蟲。除了文本內容,圖像也是網站中的重要組成部分,它們可以用于多種目的,如圖像識別、內容分析、數據備份等。 環境準備 首先,確保你的環境中已安裝Python和必要的庫。如果沒有安裝Pillow庫,可以通過以下命令安裝:pip in…

Leetcode刷題筆記6

34. 在排序數組中查找元素的第一個和最后一個位置 34. 在排序數組中查找元素的第一個和最后一個位置 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;暴力查找 [1, 2, 3, 3, 3, 4, 5] t 3 從前往后掃描暴力查找&#xff0c;最壞情況下O(N) 優化 利用數組有序的…

【LLM多模態】綜述Visual Instruction Tuning towards General-Purpose Multimodal Model

note 文章目錄 note論文1. 論文試圖解決什么問題2. 這是否是一個新的問題3. 這篇文章要驗證一個什么科學假設4. 有哪些相關研究&#xff1f;如何歸類&#xff1f;誰是這一課題在領域內值得關注的研究員&#xff1f;5. 論文中提到的解決方案之關鍵是什么&#xff1f;6. 論文中的…

隨想錄 Day45 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零

隨想錄 Day45 1049. 最后一塊石頭的重量 II 494. 目標和 474.一和零 1049. 最后一塊石頭的重量 II 題目鏈接 有一堆石頭&#xff0c;用整數數組 stones 表示。其中 stones[i] 表示第 i 塊石頭的重量。 每一回合&#xff0c;從中選出任意兩塊石頭&#xff0c;然后將它們一起…

帶你學習Mybatis之Mybatis全局配置文件

Mybatis全局配置文件 <?xml version"1.0" encoding"UTF-8"?><configuration> <!-- 配置 --> <properties/> <!-- 屬性 --> <settings/> <!-- 設置 --> <typeAliases/> <!-- 類型別名 -->…

車載以太網的未來:OPEN Alliance下17個技術委員會的最新進展與行業影響(下)

從上篇介紹來看&#xff0c;TC1-TC8大多數處于暫停或完成狀態。而TC9-TC17在2023年都有不同程度的進展&#xff0c;讓我們繼續探索藏在其中的車載以太網的發展和挑戰。 TC9 Automotive Ethernet Channel & Components&#xff08;in progress&#xff09; TC9的目標是為通…

[初始計算機]——計算機網絡的基本概念和發展史及OSI參考模型

&#x1f3e1;作者主頁&#xff1a;點擊&#xff01; &#x1f916;網絡通信基礎TCP/IP專欄&#xff1a;點擊&#xff01; ??創作時間&#xff1a;2024年5月30日11點59分 &#x1f004;?文章質量&#xff1a;96分 ? 目錄 &#x1f310;計算機網絡概述 &#x1f4af;…

opencv是什么?它有什么功能和特性?它值不值得我們去學習?我們該如何去學習呢?

1.opencv是什么&#xff1f; OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺庫&#xff0c;旨在提供一系列豐富的圖像處理和計算機視覺算法&#xff0c;以及用于構建實時圖像處理和機器視覺應用程序的開發工具。它最初由英特爾開發…

使用QT可視化操作信號與槽函數詳解

新書上架~&#x1f447;全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目錄 一、引言 二、QT信號與槽機制概述 三、實際操作步驟 四、案例演示 五、總結 一、引言 在…

中國養生保健元宇宙-探索養生保健新領域

在全球化和科技迅速發展的今天&#xff0c;元宇宙作為一種全新的互聯網應用和社會形態&#xff0c;正逐步滲透到人們生活的各個方面。特別是在養生保健領域&#xff0c;中國的元宇宙概念正在引領一場革命&#xff0c;將古老的養生智慧與現代科技完美融合&#xff0c;為人們打造…

單片機建立自己的庫文件(1)

文章目錄 前言一、代碼模塊化是什么&#xff1f;二、使用步驟1.以LCD1602作為例子2.將LCD1602 相關的代碼抽取到另外一個文件中 三、調用LCD1602.h1.新建一個工程項目&#xff0c;將LCD1602.h添加到工程中2.在主函數上加入 #include <LCD1602.h> 總結 前言 提示&#xf…

進口鋁合金電動隔膜泵

進口鋁合金電動隔膜泵是一種高效、可靠的工業泵&#xff0c;其特點、性能與應用廣泛&#xff0c;以下是對其的詳細分析&#xff1a; 特點 材質與結構&#xff1a; 采用鋁合金材料制造&#xff0c;具有良好的耐腐蝕性和輕量化特點。鋁合金材質使得泵體結構緊湊、輕便&#xff…

svg實現一個圓形以及方形的環形進度條

1. svg實現圓形進度條 效果圖&#xff1a; 1. 寫個假接口&#xff1a; let res {curLegendList: [{ progress: "87", name: "進度1",color:"#00fe41" },{ progress: "66", name: "進度2" ,color:"orange"},{ p…