嵌入式學習記錄5.27(c++基礎1)

目錄

一.C和C++的區別

二.輸入輸出流類

2.1輸出cout

2.2輸入cin

三.命名空間

2.1使用命名空間中的標識符

2.2命名空間中聲明函數

2.3命名沖突問題

2.4匿名空間

2.5命名空間添加,嵌套,重命名

四.字符串的使用

4.1string類

4.2C風格和C++風格字符串的轉化

4.3string類中常用的函數

五.bool類型

六思維導圖/練習


一.C和C++的區別

i)頭文件的區別

C++中的頭文件一般沒有.h,C++對C語法做了兼容

所以C中的頭文件,仍然可以在C++文件中使用,一般去掉C中頭文件的.h,在前面加上c

例: stdio.h ----> cstdio

ii)拓展名的區別

C語言:.c ----->使用gcc編譯器

C++: .cpp , .C ------>使用g++編譯器,g++比gcc編譯器語法更加嚴格(主函數的返回值類型不能修改)

iii)語法區別(語法的擴充)

  1. 命名空間
  2. 函數重載(一名多用)
  3. 字符串的使用(string類型)
  4. 引用(和C中的指針類似)
  5. 面向對象的特征(封裝、繼承和多態) C++是面向對象語言
  6. STL標準模板庫(前面C寫的所有數據結構C++中可以直接使用)
  7. 模板編程
  8. 智能指針(C++11開始的新特性)
  9. lambda表達式

二.輸入輸出流類

2.1輸出cout

1)cout的基本使用

cout是ostream類提供的類對象,printf()是C庫中的函數

cout可以實現級聯的輸出(連續輸出多個)

如果使用cout,需要導入頭文件,引入命名空間std

cout << a << endl;

2)cout控制格式的輸出

通過關鍵字控制輸出格式,或者通過函數控制輸出格式 #include

setbase(); 控制進制輸出

setw(); 控制寬度輸出 ---->left關鍵字

setprecison(); 控制包含小數點位數輸出

2.2輸入cin

是istream輸入流提供的類對象

在istream中對>>運算符進行了運算符重載,>>變成輸入運算符

仍然不需要格式符,會根據類型自動推導

cin >> a;

三.命名空間

在C++中,命名空間(Namespace)是一種避免命名沖突的方式,它可以把一組具有相似功能的實體(包括類、函數、變量等)封裝在一起,形成一個獨立的區域。命名空間可以有效地防止在大型程序中因命名重復而導致的沖突問題。

namespace 命名空間名 { //標識符(變量名、函數名、類型名) }

2.1使用命名空間中的標識符

定義在命名空間中的標識符,不能直接使用,需要導入后再使用

i)全局導入命名空間

using namespace 命名空間名; ---->該語句表示,導入命名空間中的所有標識符,在該語句后面,命名空間中的所有標識符可以任意使用(一般寫在頭文件下方,主函數上方)

ii)局部導入命名空間中標識符

:: ----->域限定符

在哪里使用標識符,就在哪個位置導入標識符

std::cout << "hello" << std::endl; //只在使用cout的位置導入標識符std

iii)導入命名空間中的部分標識符

使用using 命名空間名::標識符名; ----->在該語句后,可以使用導入的指定標識符

2.2命名空間中聲明函數

在命名空間中聲明函數,在命名空間外定義函數,需要在函數名前加上命名空間名::函數名

namespace Test
{//存放標識符//定義變量int num = 100;//定義結構體類型struct Stu{int age;};//聲明函數void show();
}//定義命名空間中的show()函數
void Test::show()
{cout << "hello" << std::endl;
}

2.3命名沖突問題

何時發生命名沖突,當同時可以訪問到兩個同名標識符時發生命名沖突

i)命名空間和局部變量沖突

如果不導入命名空間,不會發生沖突

即使導入了命名空間,默認訪問局部變量,也不發生訪問的沖突

如果導入命名空間后,想要訪問命名空間中的標識符,在標識符前加上命名空間名::

ii)命名空間和全局變量沖突

如果不導入命名空間中的標識符,不會發生沖突,直接訪問全局變量

導入命名空間中標識符后發生沖突:

  1. 訪問命名空間中的標識符: 命名空間名::標識符名
  2. 訪問全局變量: ::標示符名(訪問全局變量)iii)兩個命名空間中的標識符沖突

iii)兩個命名空間中的標識符沖突

必須是在同時導入了兩個命名空間時才會發生標識符沖突問題

解決方式: 命名空間名::標識符 ----->直接指定訪問某一個命名空間中的標識符

2.4匿名空間

沒有名字的命名空間就叫做匿名空間

namespace { //標識符 }

匿名空間中的標識符,無需使用using導入,也可以訪問

如果發生命名沖突,可以使用 ::標識符名,來訪問匿名空間中的標識符

如果存在命名空間和匿名空間標識符沖突的情況,(盡量不要導入有名字的命名空間中的標識符)

如果匿名空間和全局變量沖突 ::標識符名(默認訪問全局變量)

2.5命名空間添加,嵌套,重命名

1)命名空間的添加

如果定義了同名的命名空間,會自動合并成同一個命名空間

(將后續定義的內容添加到原有的命名空間中)

2)命名空間的嵌套

存在嵌套命名空間時,只需要根據定義順序,通過域限定符一層一層訪問下去即可

3)命名空間的重命名

格式

namespace 新名字 = 舊名字;

四.字符串的使用

4.1string類

string類

是C++中封裝好的一個類(可以理解為是一種數據類型)

定義字符串:string 變量名;

#include <iostream>
using namespace std;
int main()
{string s1;     //定義了一個字符串變量s1string s2 = "hello";   //定義了一個字符串變量s2使用hello初始化cout << "s1 = " << s1 << endl;cout << "s2 = " << s2 << endl;string s3(5,'a');  //定義了一個字符串變量s3使用5個a進行初始化cout << "s3 = " << s3 << endl;string s4("hi");   //定義了一個字符串變量s4使用hi字符串初始化cout << "s4 = " << s4 << endl;string s5 = s4;    //定義了一個字符串變量s5使用s4初始化cout << "s5 = " << s5 << endl;cout << s3+s2 << endl;   //stringl類對象,可以直接通過運算符完成拼接return 0;
}

4.2C風格和C++風格字符串的轉化

C風格的字符串可以直接轉換成C++風格

C++風格的字符串,不能直接轉換成C風格的字符串,需要借助于特殊的函數

data(),c_str(); //這兩個函數的返回值,都是char*類型的指針

#include <iostream>
#include <cstring>
using namespace std;int main()
{string s1 = "a";     //定義了一個字符串變量s1string s2 = "hello";   //定義了一個字符串變量s2使用hello初始化cout << "s1 = " << s1 << endl;cout << "s2 = " << s2 << endl;cout << strcmp(s1.data(),s2.c_str()) << endl;return 0;
}

4.3string類中常用的函數

i)at()

按位置訪問字符串

使用at訪問字符串時超出字符串范圍代碼會拋出異常

#include <iostream>
using namespace std;
int main()
{string s1 = "abcdefg";cout << s1[0] << endl;   //通過下標的方式訪問字符串中的字符cout << s1[100] << endl;cout << s1.at(100) << endl;   //直接代碼拋出異常,不繼續向后執行cout << s1.at(0) << endl;   //不會輸出return 0;
}

ii)empty()/clear()

empty():判斷字符串是否為空

clear():清空字符串

iii)? length()/size()

求字符串的長度

輸入字符串

getline()的兩個參數,第一個參數是輸入流對象,第二個參數輸入的字符串變量

string s1; getline(cin,s1);

五.bool類型

常用在函數的返回值

  1. C語言中不直接支持bool類型,但是C++中直接支持bool類型,結果是一個邏輯值

非0即1,true和false

  1. bool類型的變量可以使用true和false賦值,也可以使用數值賦值
  2. cout輸出時,默認使用數字表示法輸出bool類型的值
  3. 如果想要使用單詞輸出bool類型的值,在輸出時加上boolalpha,想要恢復數字表示法加上noboolalpha
  4. bool類型的大小1Byte,因為計算機分配內存的基本單位是字節
  5. #include <iostream>
    using namespace std;int main()
    {bool t = 0.01;cout << t << endl;cout << boolalpha << t << endl;     //truecout << noboolalpha << t << endl;   //1 cout << sizeof(t) << endl;   //1Bytereturn 0;
    }

六思維導圖/練習

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

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

相關文章

LeetCode27.移除元素

題目鏈接&#xff1a; 27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 思路分析&#xff1a;同樣屬于經典的雙指針移動問題&#xff0c;要掌握固定的思路即可。 算法分析&#xff1a;這個題目可以這樣處理&#xff0c;我們把所有非val 的元素都向前移動&#xff0c;把…

Java面試八股之線程池是怎么實現的

線程池是怎么實現的 線程池是一種基于池化技術的線程管理方式&#xff0c;通過預先創建一定數量的線程并保持在池中待命&#xff0c;從而在有任務來臨時能夠快速分配線程處理任務&#xff0c;而無需頻繁創建和銷毀線程&#xff0c;以此達到提升系統性能、減少資源消耗的目的。…

推薦《從零開始大模型開發與微調》

大模型是深度學習是當前AI和NLP研究與產業中最重要的方向之一。 本書用PyTorch 2.0作為學習大模型的基本框架&#xff0c;以ChatGLM為例詳細講解大模型的基本理論、算法、程序實現、應用實戰以及微調技術&#xff0c;為讀者揭示大模型開發技術。 《從零開始大模型開發與微調&…

兩個數組的交集-力扣

想到的解法是使用兩個哈希表&#xff0c;s1用來統計nums1中出現過的數字&#xff0c;然后遍歷nums2數組&#xff0c;當能夠在s1中查找到nums2的元素時&#xff0c;將這個元素添加到s2中&#xff0c;最后遍歷s2&#xff0c;將其中的元素添加到返回數組中。 但最開始寫時&#xf…

外星人存在與否......----小話外星人(1)

前一段時間&#xff0c;看了好多關于UFO、外星人、宇宙、遠古外星人的視頻和電子書&#xff0c;最后發現&#xff0c;這樣的東西還是不要看多為好&#xff0c;搞得好像這些是真的似的&#xff0c;有時睡覺會被意外驚醒&#xff0c;想多了...... 1、外星人存在嗎 不管有多少UFO的…

Windows10映射網絡驅動器之后不顯示映射盤

目錄 背景解決步驟1、按 Windows R 打開運行2、打開注冊表編輯器3、 System上新建-- DWORD(32bit)4、對新建的文件重命名5、將EnableLinkedConnections的數值改為16、退出注冊表編輯器&#xff0c;重啟系統。 知識擴展斷開連接備份注冊表 背景 目前有一臺NAS服務器,和一臺lin…

Vuex 頁面刷新數據丟失怎么解決

當Vuex中的數據在頁面刷新后丟失時&#xff0c;這通常是因為Vuex的狀態數據是保存在運行內存中的&#xff0c;頁面刷新會導致Vue實例重新加載&#xff0c;進而Vuex中的數據被重置為初始狀態。為了解決這個問題&#xff0c;可以采取以下幾種方法&#xff1a; 1. 使用瀏覽器的本…

工廠模式的三種實現方式

文章目錄 1.引出工廠模式具體需求 2.傳統模式1.類圖2.目錄結構3.pizzastore 用于設計pizza1.Pizza.java 抽象的Pizza類型2.CheesePizaa.java CheesePizaa3.GreekPizza.java GreekPizza 4.order 用于訂購和制作pizza1.OrderPizza.java 制作pizza2.PizzaStore.java 訂購pizza 5.優…

【Redis】 關于列表類型

文章目錄 &#x1f343;前言&#x1f340;常見操作命令介紹&#x1f6a9;lpush&#x1f6a9;lpushx&#x1f6a9;rpush&#x1f6a9;rpushx&#x1f6a9;lrange&#x1f6a9;lpop&#x1f6a9;rpop&#x1f6a9;lindex&#x1f6a9;linsert&#x1f6a9;llen&#x1f6a9;lrem&…

“按摩”科技?

都說A股股民是特別善于學習的&#xff0c;這不市場又現新概念——“按摩科技”&#xff0c;成立僅6年&#xff0c;把上門按摩干到35億營收也是沒誰了&#xff0c;現在號稱有1000萬用戶&#xff0c;3萬家入駐商戶數的按摩平臺&#xff0c;難道就憑借2.5萬名女技師&#xff0c;活…

【Django】中間件實現鉤子函數預處理和后處理,局部裝飾視圖函數

在app文件夾里新建middleware.py繼承MiddlewareMixin&#xff0c; 編寫中間件類&#xff0c;重寫process_request、process_response鉤子函數 from django.http import HttpRequest, HttpResponse from django.utils.decorators import decorator_from_middleware from django…

關于pytest中用例名稱使用中文亂碼的解決

場景&#xff1a;使用pytest.mark.parametrize裝飾器為用例自定義名稱時&#xff0c;運行顯示亂碼。如下圖所示&#xff1a; 解決方案&#xff1a; 1.在根目錄 pytest.ini中增加一行代碼 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

NAT 網絡轉換

NAT(Network Address Translation) 網絡地址轉換 0x01 NAT 簡介 為什么要使用 NAT IPv4 網絡地址緊缺&#xff0c;從而出現了私有網段&#xff0c;來補充地址&#xff0c;但私有網段不課訪問 internet 所以出現了 NAT 地址轉換&#xff0c;將私有地址&#xff0c;轉換為公網 I…

一口氣看完es(上)

此系列博客分為上中下3篇&#xff1a;上篇是關于es的概念和對數據的增刪改操作&#xff0c;中篇是對數據的查詢、對搜索結果進行處理操作&#xff0c;下篇是介紹怎么在Java代碼中調用和操作es。 基本概念 1、es是什么&#xff1f;有什么作用&#xff1f; es全名是elasticsea…

關于0成本部署個人博客

分享一個文章關于零成本搭建個人博客 參考&#xff1a;‘關于部署博客hexoshokagithub的流程以及問題’ - 關于博客部署 | XiaoYang Guo Welcome to Guo Xiaoyangs personal blog 歡迎來到郭曉陽的個人博客 (1330303.github.io) 這個博主講的流程很全&#xff0c;而且回答也…

智慧管廊巡檢運維解決方案

一、智慧管廊巡檢行業目前存在的挑戰和難題 智慧管廊巡檢行業面臨著運行環境的客觀影響&#xff0c;如地面施工、液體滲漏、通風不佳、內部空間受限等問題。而管廊巡檢機器人系統的出現卻具有重大意義。它能夠有力地保障管廊安全且可靠地運行&#xff0c;在面對火情、災情等緊…

springboot基礎篇(快速入門+要點總結)

目錄 一、SpringBoot簡介 二、創建SpringBoot&#xff08;通過Idea腳手架搭建項目&#xff09; 三、properties配置文件 properties 配置文件說明 ①. properties 基本語法 ②. 讀取配置?件 ③. properties 缺點 2. yml 配置?件說明 ①. yml 基本語法 ②. yml 使用進…

上海AI lab發布MathBench,GPT-4o的數學能力有多強?

大模型數學能力哪家強&#xff1f; 最近&#xff0c;上海AI lab構建了一個全面的多語言數學基準——MathBench。與現有的基準不同的是&#xff0c;MathBench涵蓋從小學、初中、高中、大學不同難度&#xff0c;從基礎算術題到高階微積分、統計學、概率論等豐富類別的數學題目&a…

React項目知識積累(五)

1.dispatch、dev派發 src/models/formStatus.js: const FromStatusModel {namespace: "fromStatus",state: {isDisable: false,},reducers: {saveIsDisable(state, { payload }) {return {...state,...payload,};},}, };export default FromStatusModel; 改變和提…

【Linux】升級make(版本4.4.1)、升級gdb(版本14.1)、升級autoconf(版本2.71)

centos7升級make&#xff08;版本4.4.1&#xff09;&#xff1a; make&#xff1a;編譯和構建工具。Linux中很多軟件包需要make編譯構建。官網&#xff1a;Make - GNU Project - Free Software Foundation 本次升級前的make版本是3.82&#xff0c;準備安裝的版本是4.4.1。make…