C++入門到進階(圖文詳解,持續更新中)

C++入門到進階(圖文詳解,持續更新中)

目錄

C++入門到進階(圖文詳解,持續更新中)

數據

數據類型

基本數據類型/內置數據類型

C++常用運算符

賦值運算符

關系運算符

邏輯運算符

雜項運算符

數據的本地化存儲

一、準備工作:

二、寫流即向本地文件中寫入數據該如何實現?

1.創建寫流的對象或創建寫流的變量

2.打開文件執行,準備執行寫數據(稱為開流)

3.對本地寫數據

4.關閉流

三、讀流(即從本地文件中讀取數據)

1.創建讀流對象

2.打開文件準備讀取數據(稱為開流)

3.開始從本地讀取數據

4.關閉流

函數

函數的聲明和定義

?編輯

函數傳值

傳出數據(即返回值)

傳入數據(即傳參)

1.什么是傳參?

2.作用

3.類型

4.關于形參在函數聲明和函數定義中注意點

5.默參

6.函數重載

7.傳參方式

面向對象


數據

數據類型

基本數據類型/內置數據類型

整型:有符號與無符號

int

unsignedf int

long

unsigned long int

short int

ushort

byte

sbyte

long int

unsigned long int

浮點型/實型:

float

double

long double

字符型:

char

布爾型:

bool

C++常用運算符

賦值運算符

基本賦值運算符:=

復合賦值運算符:+=(加賦值)、-=(減賦值)、*=(乘賦值)、/=(除賦值)、%=(求余賦值)、 <<=(左移賦值)、>>=(右移賦值)、&=(按位與賦值)、|=(按位或賦值)、*A=(按位異或賦值)

關系運算符

== != < > <= >=

邏輯運算符

&& || !

雜項運算符

sizeof和三目運算符

數據的本地化存儲

一、準備工作:

實現本地化存儲需要

頭文件為:iostream,ofstream

引入頭文件

#include<iostream>

#include<ofstream>

命名空間為:std

引入命名空間:

using namespace std;

二、寫流即向本地文件中寫入數據該如何實現?

使用ofstream的方法,操作步驟為:

1.創建寫流的對象或創建寫流的變量

ofstream ofs;

2.打開文件執行,準備執行寫數據(稱為開流)

ofs.open("abc.txt", ios::out);

3.對本地寫數據

string name;

getline(cin, name,'q');

ofs << name << endl;

4.關閉流

ofs.close();

三、讀流(即從本地文件中讀取數據)
1.創建讀流對象

?ifstream ifs;

2.打開文件準備讀取數據(稱為開流)

ifs.open("abc.txt", ios::in);

3.開始從本地讀取數據

方法1:
?char ValueArrays[1024]{};

?while (ifs >> ValueArrays)//非零即為真
? ? {
? ? ? ? cout << ValueArrays << endl;//這是字符串的打印
? ? }

方法2:

string str = " ";
? ? while (ifs >> str)
? ? {
? ? ? ? cout << str << endl;
? ? }

4.關閉流

?ifs.close();

存儲案例展示:(存儲數據到UserInfo的txt文本中,讀取數據,新增數據,查找相關姓名、年齡、地址)

#include <iostream>
#include<fstream>  
#include<string>
#include"User.h"
/*
預處理
#include中的" "和<>的使用
<>:代表的導入C++庫文件
“ ”:先檢索是否有沒有自己寫的頭文件,如果檢索不到自己寫的頭文件,會自動查找C++庫,找不到就報錯
*/using namespace std;
void Save()
{using namespace std;ofstream ofs;ofs.open("abc.txt", ios::out);string name;getline(cin, name,'q');ofs << name << endl;ofs.close();}
int name_index = 0;
void Add(string nameArrays[])//name是一個形參,需要一個string 類型數組的地址
{string name = " ";cin >> name;nameArrays[name_index] = name;name_index++;ofstream ofs;ofs.open("abc.txt", ios::out);for (int i = 0; i < name_index; i++){ofs << nameArrays[i] << endl;}ofs.close();
}void GetValue()
{using namespace std;//1. 創建對象ifstream ifs;//2. 開流ifs.open("abc.txt", ios::in);//3.讀取數據,方法1//3.1數據本地讀取出來了,需要找到一個容器去存放讀取出來的數據char ValueArrays[1024]{};//3.2開始取出數據,并將本地數據在數據中while (ifs >> ValueArrays)//非零即為真{cout << ValueArrays << endl;//這是字符串的打印}ifs.close();cout << "---------" << endl;//3.讀取數據,方法2//3.1數據本地讀取出來了,需要找到一個容器去存放讀取出來的數據//讀取不走回頭路ifs.open("abc.txt", ios::in);string str = " ";while (ifs >> str){cout << str << endl;}ifs.close();cout << "--------" << endl;//3.讀取數據,方法3 借助一個ifstream里的一個函數getlineifs.open("abc.txt", ios::in);char buf[1024]{};while (ifs.getline(buf, sizeof(buf)))//getline是ifstream下的一個函數,用于獲取到一行數據,函數的第一個參數是用于接收一行數據的字符數組,//第二個參數是用于接收數據的容器的大小{cout << buf << endl;}ifs.close();cout << "--------" << endl;//3.讀取數據,方法4 借助一個string里的一個函數getlineifs.open("abc.txt", ios::in);string str_buf = {};while (getline(ifs, str_buf)){cout << str_buf << endl;}ifs.close();cout << "--------" << endl;//3.讀取數據,方法5 借助一個ifstream里的一個函數eofifs.open("abc.txt", ios::in);char eof_buf[1024]{};while (!ifs.eof()){ifs >> eof_buf;cout << eof_buf << endl;}ifs.close();
}void SetValue()
{string name = " ";string age = " ";string address = " ";cout << "請輸入姓名:" << endl;cin >> name;cout << "請輸入年齡:" << endl;cin >> age;cout << "請輸入地址:" << endl;cin >> address;ofstream ofs;ofs.open("Value.txt", ios::out);ofs << name << "  ";ofs << age << "  ";ofs << address << endl;ofs.close();
}void SelValue()
{string r_name = " ";string r_age = " ";string r_address = " ";ifstream ifs;ifs.open("Value.txt", ios::in);while (ifs >> r_name && ifs >> r_age && ifs >> r_address){cout << "姓名:" << r_name << ",年齡:" << r_age << ",地址:" << r_address << endl;}ifs.close();
}//增加用戶
User uArray[6] = {};
int uSize = 0;
void AddUser()
{string name;int age;string address;cout << "輸入姓名:" << endl;cin >> name;cout << "輸入年齡:" << endl;cin >> age;cout << "輸入地址:" << endl;cin >> address;User uInstance;uInstance.name = name;uInstance.age = age;uInstance.address = address;uArray[uSize] = uInstance;uSize++;ofstream ofs;ofs.open("UserInfo.txt", ios::out);for (int i = 0; i < uSize; i++){ofs << uArray[i].name << " ";ofs << uArray[i].age << " ";ofs << uArray[i].address << endl;}ofs.close();
}int Find(string name)
{for (int i = 0; i < uSize; i++){if (uArray[i].name == name){return i;}}return -1;
}//查詢所有人的所有信息
void SelAllUser()
{ifstream ifs;ifs.open("UserInfo.txt", ios::in);//is_open判斷上一行代碼中打開的文件是否存在//存在返回真,不存在返回假/*if (ifs.is_open()){cout << "文件存在" << endl;}elsecout << "文件不存在" << endl;*/if (!ifs.is_open()){cout << "文件不存在" << endl;return;//文件不存在,下方邏輯不用執行}char buf[1024];ifs >> buf;if (ifs.eof()){cout << "文件存在,但沒數據" << endl;return;//下方邏輯無需進行}ifs.close();ifs.open("UserInfo.txt", ios::in);int i = 1;string name;int age;string address;while (ifs >> name && ifs >> age && ifs >> address){cout << "第" << i << "人的姓名是" << name << ",年齡是" << age << ",地址是" << address << endl;}}
//查詢某個人的所有信息
void SelUser()
{cout << "輸入名字" << endl;string sel_name = " ";cin >> sel_name;int index = Find(sel_name);//Find()會返回一個int類型的值if (index != -1) {}//ifstream ifs;ifs.open("UserInfo.txt", ios::in);string name = " ";int age = 0;string address = " ";while (ifs >> name && ifs >> age && ifs >> address){if (name == sel_name){cout << "用戶名為:" << name << ",年齡是:" << age << ",地址是:" << address << endl;}}
}
//初始化
int Init()
{ifstream ifs;ifs.open("UserInfo.txt", ios::in);if (!ifs.is_open()){cout << "文件不存在" << endl;return -1;//文件不存在,下方邏輯不用執行}char buf[1024];ifs >> buf;if (ifs.eof()){cout << "文件存在,但沒數據" << endl;return -1;//下方邏輯無需進行}ifs.close();ifs.open("UserInfo.txt", ios::in);int i = 0;string name;int age;string address;while (ifs >> name && ifs >> age && ifs >> address){uArray[i].name = name;uArray[i].age = age;uArray[i].address = address;i++;}return i;
}
int main()
{   //string str = {};//getline(cin, str, 'q');//控制臺輸入數據,賦值到str中,按q鍵再按回車鍵結束//getline(cin, str, '\t');//控制臺輸入數據,賦值到str中,按Tab鍵然后再按回車結束//cout << str << endl;//Save();//GetValue();//SetValue();// SelValue();int addIndex = Init();while (true) {cout << "添加:1,查詢:2,退出:0" << endl;int selecter;cin >> selecter;switch (selecter){case 0:exit;break;case 1:AddUser();break;case 2:SelAllUser();break;}}system("pause");
}

函數

函數的聲明和定義

函數聲明的作用:代表的是函數的出生位置(占位置的),如果在文件最上方的位置聲明了函數,不用擔心函數和函數之間互相調用編譯不通過的問題

函數的定義:為函數聲明寫函數體(寫邏輯)

注?:可能出現的bug,函數只有聲明,沒有定義,這個函數卻被調用了,被編譯時期的異常error

函數傳值

傳出數據(即返回值)

作用:在函數內傳數據出函數

樣式

返回類型 函數名稱(參數)

{

? ? ? ? return 對應返回類型的值;

? ? ? ? //此處的return有雙重作用:

? ? ? ? 1.跳轉語句(跳出函數)

? ? ? ? 2.返回值

}

可以返回的值:

1.對應返回類型的值

2.對應返回類型的變量

3.帶同種返回類型返回值的函數調用——先執行函數調用,再返回值

傳入數據(即傳參)
1.什么是傳參?

傳參就是實參傳入形參

2.作用

在函數外部傳入數據到函數內部

3.類型

形參:在函數聲明和定義的時候寫的是行參

實參:在函數調用的時候 傳遞的值是實參

實參的種類:

(1)對應形參類型的值

(2)對應形參類型的變量

(3)帶同種返回類型返回值的函數調用,即先執行函數調用,再傳參數(實參傳參數)

4.關于形參在函數聲明和函數定義中注意點

(1)聲明的形參參數名稱和定義的形參參數名稱

(2)可以不一樣聲明的時候可以省略參數名稱

(3)如果存在函數的默參,默認是必須寫在函數聲明位置的,不可以在聲明和定義中都寫一遍默參

5.默參

作用:函數可以在聲明或者定義的時候給出默認的邏輯執行

  • 關于默參的放置位置說明

    • 如果只有一個默參

      • 放在參數結尾處(最右側)

    • 如果有多個默參

      • 從右到左依次給出默參,中間不可以隔開使用

        • 錯誤演示:void Function(int i=10,int a,bool b=false)

        • 正確演示::void Function(int i=10,int a=10,bool b=false)

6.函數重載
  • 函數名相同,但是函數參數(參數類型)不同,通過傳入不同的實參,調用不同的函數,執行不同的功能

  • 注意:

    • 函數返回值不參與函數重載的過程

    • 如果被重載的函數中出現了默參

      • 建議不要寫成重載函數

      • 如果不接受建議,就需要保證默參的幾個參數類型與其他被重載的函數的參數不一致

7.傳參方式

(1)值傳遞:值傳遞只能影響本函數,值的修改不會影響其他的功能,也不會影響到實參

(2)地址傳遞

(3)引用傳遞

面向對象

待更新.....

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

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

相關文章

第二課:使用域名dns ping通www.baidu.com

需要一臺dns服務器&#xff0c;實現域名解析&#xff0c;把對應的網址變為Ip地址。 首先按照之前博客的配置&#xff0c;自動分配給PC1和PC2的IP地址等相關配置。 然后增加一臺server交換機連接到交換機上&#xff0c;配置好ip地址&#xff0c;192.168.1.100。在dnsServer中。…

7.11日學習打卡----初學Redis(六)

7.11日學習打卡 目錄&#xff1a; 7.11日學習打卡一. redis事務事務的概念與ACID特性Redis事務三大特性Redis事務執行的三個階段Redis事務基本操作 二. redis集群主從復制主從復制環境搭建主從復制原理剖析 哨兵監控哨兵監控環境搭建哨兵工作原理剖析 故障轉移Cluster模式Clust…

c++初階知識——類和對象(1)

目錄 1.類和對象 1.1 類的定義 1.2 訪問限定符 1.3 類域 2.實例化 2.1 實例化概念 2.2 對象大小 內存對齊規則 3.this指針 1.類和對象 1.1 類的定義 &#xff08;1&#xff09;class為定義類的關鍵字&#xff0c;Stack為類的名字&#xff0c;{}中為類的主體&#xf…

達夢數據庫中的線程和進程

達夢數據庫中的線程和進程 在達夢數據庫中&#xff0c;線程和進程的概念與操作系統中的定義類似&#xff0c;但有一些特定的實現細節和用途。以下是達夢數據庫中線程和進程的一些關鍵點&#xff1a; 進程&#xff08;Process&#xff09;&#xff1a; 在達夢數據庫中&#x…

django的增刪改查,排序,分組等常用的ORM操作

Django 的 ORM&#xff08;對象關系映射&#xff09;提供了一種方便的方式來與數據庫進行交互。 1. Django模型 在 myapp/models.py 中定義一個示例模型&#xff1a;python from django.db import modelsclass Person(models.Model):name models.CharField(max_length100)age…

mysql數據庫被偷家,數據全部丟失。還勒索我給他比特幣

歹徒留下的勒索信息。 解決辦法&#xff1a; 1、設置ip白名單&#xff0c; 2、端口不要使用默認端口&#xff0c;隨便換個端口就行。 3、密碼設置復雜一點。

【Java16】多態

向上類型轉換 對于引用變量&#xff0c;在程序中有兩種形態&#xff1a;一種是編譯時類型&#xff0c;這種引用變量的類型在聲明它的時候就決定了&#xff1b;另一種則是運行時類型&#xff0c;這種變量的類型由實際賦給它的對象決定。 當一個引用變量的編譯時類型和運行時類…

【Pytorch】Conda環境pack打包遷移報錯處理

文章目錄 Anaconda虛擬環境打包一、源電腦的環境打包1.安裝conda-pack工具2.確定環境3.打包環境4.將打包環境拷貝到U盤 二、環境遷移到目標電腦上三、異常處理pip install -e. 導致無法pack→忽略管理的文件已經被刪除或者被覆蓋→壓縮成tar注意 重新激活環境 Anaconda虛擬環境…

14 - matlab m_map地學繪圖工具基礎函數 - 一些數據轉換函數(一)

14 - matlab m_map地學繪圖工具基礎函數 - 一些數據轉換函數&#xff08;一&#xff09; 0. 引言1. 關于m_ll2xy和m_xy2ll2. 關于m_lldist3. 關于m_xydist4 關于m_fdist5 關于m_idist6. 總結 0. 引言 通過前面篇節已經將m_map繪圖工具中大多繪圖有關的函數進行過介紹&#xff0…

Nuxt3封裝網絡請求 useFetch $fetch

前言&#xff1a; 剛接觸、搭建Nuxt3項目的過程還是有點懵的&#xff0c;有種摸石頭過河的感覺&#xff0c;對于網絡請求這塊&#xff0c;與之前的Vue3項目有所區別&#xff0c;在Vue項目通常使用axios這個庫進行網絡請求&#xff0c;但在Nuxt項目并不推薦&#xff0c;因為有內…

RK3568平臺(顯示篇)主屏副屏配置

一.主屏副屏配置 目前在RK3568平臺上有兩路HDMIOUT輸出&#xff0c;分別輸出到兩個屏幕上&#xff0c;一路配置為主屏&#xff0c;一路配置為副屏。 硬件原理圖&#xff1a; &hdmi0_in_vp2 {status "okay"; };&hdmi1_in_vp0 {status "okay"; }…

【JAVA入門】Day15 - 接口

【JAVA入門】Day15 - 接口 文章目錄 【JAVA入門】Day15 - 接口一、接口是對“行為”的抽象二、接口的定義和使用三、接口中成員的特點四、接口和類之間的關系五、接口中新增的方法5.1 JDK8開始接口中新增的方法5.1.1 接口中的默認方法5.1.2 接口中的靜態方法 5.2 JDK9 開始接口…

Pandas實戰指南:any()函數深度解析與高效應用

Pandas實戰指南&#xff1a;any()函數深度解析與高效應用 引言 在數據分析和處理過程中&#xff0c;經常需要快速檢查數據集中是否存在滿足特定條件的元素。Pandas庫中的any()函數正是這樣一個強大的工具&#xff0c;它可以幫助我們沿著指定的軸檢查是否至少有一個元素滿足某…

Transformer重要論文與書籍 - Transformer教程

近年來&#xff0c;人工智能領域中的Transformer模型無疑成為了炙手可熱的研究對象。從自然語言處理&#xff08;NLP&#xff09;到計算機視覺&#xff0c;Transformer展現出了前所未有的強大能力。今天&#xff0c;我們將探討Tra在當今的人工智能和機器學習領域&#xff0c;Tr…

路由守衛中使用next()跳轉到指定路徑時會無限循環

路由守衛鉤子介紹 const router new VueRouter({ ... }) // 導航路由變化時觸發路由守衛鉤子 router.beforeEach((to, from, next) > {// ... }) to: Route: 即將要進入的目標路由對象(到哪去)from: Route: 當前導航正要離開的路由(從哪來)next: Function(必須&#xff0…

axios使用sm2加密數據后請求參數多了雙引號解決方法

axios使用sm2加密數據后請求參數多了雙引號解決 背景問題描述解決過程 背景 因項目安全要求&#xff0c;需對傳給后端的入參加密&#xff0c;將請求參數加密后再傳給后端 前期將axios降低到1.6.7后解決了問題&#xff0c;但最近axios有漏洞&#xff0c;安全要求對版本升級&…

從零開始[進階版]深入學習圖像分類:使用Python和TensorFlow

引言 圖像分類是計算機視覺中的一個核心任務&#xff0c;廣泛應用于人臉識別、自動駕駛、醫療影像分析等領域。在本篇文章中&#xff0c;我們將深入探討圖像分類的原理和實現&#xff0c;使用Python和TensorFlow搭建一個完整的圖像分類系統。本文不僅適合初學者&#xff0c;也…

【Qt 初識 Test】用圖形化和代碼的方式實現簡單的Qt程序

文章目錄 1. 通過圖形化的方式實現&#x1f34e;2. 通過代碼的方式實現 1. 通過圖形化的方式實現&#x1f34e; 在界面創建出一個控件&#xff0c;顯示 hello world&#xff0c;通過拖拽的方式實現&#xff1b; widget.ui文件如下&#xff1a;&#x1f50d; 生成的 ui_widget.…

生物環保技術有哪些缺點或者局限性呢

生物環保技術&#xff0c;作為一種利用生物學原理和技術來處理環境污染的方法&#xff0c;雖然具有綠色環保、高效節能等優點&#xff0c;但也存在一些缺點和局限性。以下是對這些缺點和局限性的詳細分析&#xff1a; 一、受環境因素影響大 生物環保技術的效果往往受到環境因…

數據結構第18節 散列表 - 應用

散列表&#xff08;Hash Table&#xff09;&#xff0c;也被稱為哈希表&#xff0c;是一種數據結構&#xff0c;它通過使用哈希函數將鍵映射到數組的某個位置來實現快速查找。散列表通常提供平均時間復雜度為O(1)的查找、插入和刪除操作&#xff0c;這使得它們在處理大量數據時…