【C++】初識C++(一)

一.什么是C++

C語言是結構化和模塊化的語言,適合處理較小規模的程序。對于復雜的問題,規模較大的程序,需要高度 的抽象和建模時,C語言則不合適。為了解決軟件危機, 20世紀80年代, 計算機界提出了OOP(object oriented programming:面向對象)思想,支持面向對象的程序設計語言應運而生。

1982年,Bjarne Stroustrup博士在C語言的基礎上引入并擴充了面向對象的概念,發明了一種新的程序語 言。為了表達該語言與C語言的淵源關系,命名為C++。因此:C++是基于C語言而產生的,它既可以進行C語 言的過程化程序設計,又可以進行以抽象數據類型為特點的基于對象的程序設計,還可以進行面向對象的程序設計

C++的發展史

1979年,貝爾實驗室的本賈尼等人試圖分析unix內核的時候,試圖將內核模塊化,于是在C語言的基礎上進行擴展,增加了類的機制,完成了一個可以運行的預處理程序,稱之為C with classes。

C++的歷史版本:

?C++的關鍵字

在(C++98)版本中,相較于C語言C++增加了31個關鍵字,一共63個。

二、命名空間?

在C/C++中,變量、函數和類都是大量存在的,這些變量、函數和類的名稱都將作用于全局作用域中,可能會導致很多命名沖突。使用命名空間的目的就是對標識符和名稱進行本地化,以避免命名沖突或名字污染,namespace關鍵字的出現就是針對這種問題的。

命名空間定義

定義命名空間,需要使用到 namespace 關鍵字,后面跟命名空間的名字,然后接一對{}中即為命名空間的成員。

普通定義
namespace swean
{int rand = 10;int Add(int left, int right){return left + right;}}
嵌套定義
namespace swean
{int rand = 10;namespace swean1{int rand = 1;}
}
空間合并

同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會將其成員合成在同一個命名空間中,所以我們不能在同一個命名空間中定義兩個相同名稱的成員。

命名空間使用

那么,命名空間應該如何使用呢,我們有以下三種方法:

加命名空間名稱及作用域限定符?

符號“::”在C++中叫做域作用限定符,我們通過“命名空間名稱::命名空間成員”便可以訪問到命名空間中相應的成員。:: 的左邊為,如果有命名空間域,則限定訪問命名空間域中的內容,如果域左邊為空,訪問的就是全局域,會直接到全局范圍內找 :: 右邊的變量或其他。

int rand = 0;namespace swean
{int rand = 10;namespace swean1{int rand = 1;}
}int main()
{//printf("%d\n", rand);//域作用限定符printf("%p\n", rand);printf("%d\n", swean::rand);printf("%d\n", swean::swean1::rand);return 0;
}
使用using將命名空間中的成員引入

?用“using 命名空間名稱::命名空間成員”的方式將命名空間中指定的成員引入。這樣一來,在該語句之后的代碼中就可以直接使用引入的成員變量了。

#include <stdio.h>
namespace swean
{int rand;
}
using swean::rand;
int main()
{rand = 10;printf("%d\n", rand);return 0;
}
使用using namespace 命名空間名稱引入

通過”using namespace 命名空間名稱“將命名空間中的全部成員引入。這樣一來,在該語句之后的代碼中就可以直接使用該命名空間內的全部成員了。?

#include <stdio.h>
namespace swean
{int rand;
}
using namespace swean;
int main()
{rand = 10;printf("%d\n", rand);return 0;
}

?三、C++輸入&輸出

#include<iostream>
//std是C++標準庫的命名空間
//using namespace std;
using std::cout;
using std::endl;int main()
{// << 流插入運算符cout << "hello world" << "\n";std::cout << "hello world" << std::endl;int i = 0;// << 流提取std::cin >> i;return 0;
}

1. 使用cout標準輸出對象(控制臺)和cin標準輸入對象(鍵盤)時,必須包含< iostream >頭文件 以及按命名空間使用方法使用std。

2. cout和cin是全局的流對象,endl是特殊的C++符號,表示換行輸出,他們都包含在包含< iostream >頭文件中。

3. >是流提取運算符。

4. 使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時那樣,需要手動控制格式。 C++的輸入輸出可以自動識別變量類型。

#include <iostream>
using namespace std;
int main()
{int i;double d;char arr[20];cin >> i;//讀取一個整型cin >> d;//讀取一個浮點型cin >> arr;//讀取一個字符串cout << i << endl;//打印整型icout << d << endl;//打印浮點型dcout << arr << endl;//打印字符串arrreturn 0;
}

四、缺省參數

缺省參數概念

缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數時,如果沒有指定實 參則采用該形參的缺省值,否則使用指定的實參。

void func(int a = 1)
{cout << a << endl;
}

缺省參數分類

全缺省參數

全缺省參數,即函數的全部形參都設置為缺省參數。

//全缺省
void func1(int a = 10, int b = 10, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}
半缺省參數

半缺省參數必須從右往左依次給出,不能間隔著給。傳參時必須連續,缺省值使用必須從右往左連續使用?

//半缺省
void func2(int a, int b = 10, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}

注意:

缺省參數不能在函數聲明和定義中同時出現

一般是,聲明時給缺省值,定義不給。.

//錯誤案例void func1(int a = 10, int b = 10, int c = 30);
void func1(int a = 10, int b = 10, int c = 30)
{cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl << endl;
}

缺省值必須是常量或者全局變量。

五、函數重載

函數重載概念

函數重載是函數的一種特殊情況,C++允許在同一作用域中聲明幾個功能類似的同名函數,這 些同名函數的形參列表(參數個數 或 類型 或 類型順序)不同,常用來處理實現功能類似數據類型 不同的問題。

#include <iostream>
using namespace std;
int Add(int x, int y)
{return x + y;
}double Add(double x, double y)
{return x + y;
}int main()
{cout << Add(1, 2) << endl;cout << Add(1.1, 2.2) << endl;return 0;
}

函數重載的原理--名字修飾

為什么C++支持函數重載,而C語言不支持函數重載呢? 在C/C++中,一個程序要運行起來,需要經歷以下幾個階段:預處理、編譯、匯編、鏈接。

在C語言中,匯編階段進行符號匯總時,一個函數匯總后的符號就是其函數名,所以當匯總時發現多個相同的函數符號時,編譯器便會報錯。
?
而 C++ 在進行符號匯總時,對函數的名字修飾做了改動,函數匯總出的符號不只是函數的函數名,而是通過其參數的類型和個數以及順序等信息匯總出 一個符號,這樣一來,就算是函數名相同的函數,只要其參數的類型或參數的個數或參數的順序不同,那么匯總出來的符號也就不同了。

vs:

gcc:

?

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

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

相關文章

圖形處理單元(GPU)在現代計算中的應用與挑戰(研究論文框架)

摘要:隨著高性能計算需求的日益增長,圖形處理單元(GPU)已從專業的圖形渲染處理器轉變為具有高性能并行處理能力的多功能計算平臺。本文將探討GPU的核心優勢、編程模型、在不同領域的應用以及面臨的挑戰和限制。此外,還將討論GPU技術的未來發展趨勢和潛在的研究機會。 關鍵…

mongodb 查詢語句學習筆記

基礎查詢 正則查詢 {status: A,$or: [{ qty: { $lt: 30 } }, { item: { $regex: ^p } }] }AND 查詢 { "size.h": { $lt: 15 }, "size.uom": "in", status: "D" }OR 查詢 { $or: [ { status: "A" }, { qty: { $lt: 30 } …

2024年機動車簽字授權人題庫,助你沖刺!絕對不會讓你后悔!

61.&#xff08;&#xff09;使汽車按駕駛人選定的方向行駛。 A.傳動系統 B.行駛系統 C.轉向系統 D.制動系統 答案&#xff1a;C 62.&#xff08;&#xff09;使汽車各總成及部件安裝在適當的位置&#xff0c;對全車起支承作用以保證汽車正常行駛。 A.傳動系統 B.行駛系…

01.計算機圖形學概述

01.計算機圖形學概述 從技術的角度上看&#xff0c;什么是一個好的畫面&#xff1f; 直接看這個畫面是不是足夠亮&#xff0c;這體現了渲染中的一個技術叫全局光照。 應用范圍 游戲&#xff08; Video Games&#xff09;電影/特效&#xff08; Movies&#xff09;動漫/動畫&…

如何讓Linux系統變得更安全?

本文嘗試從linux安全加固、漏洞利用及防御措施、安全意識三個方面思考如何讓linux系統變得更加安全. 一、linux常見安全加固操作 對Linux系統進行詳細的安全加固操作,可以從多個方面進行,包括系統更新和補丁管理、用戶和權限管理、網絡安全配置、文件和系統安全、日志和審計…

Qt代碼分析

要使用代碼分析工具&#xff0c;請在Analyze菜單或(Start Debugging of Startup Project)按鈕的下拉菜單中選擇它。當您處于調試模式時&#xff0c;您可以通過在調試器工具欄上的菜單中選擇工具來切換工具。 您可以將調試模式下的視圖拖放到屏幕上的新位置。意見的大小和立場將…

c++關鍵字default,delete

文章目錄 概述defaultdelete 小結 概述 在看一些開源項目的源碼的時候&#xff0c;經常會看到default和delete。這2個關鍵字究竟什么意思呢&#xff1f;這篇文章就來一點一點拆解下。 default 默認構造函數、拷貝構造函數、移動構造函數、拷貝賦值運算符、移動賦值運算符和析…

HDFS學習

3.5 HDFS存儲原理 3.5.1 冗余數據保存 作為一個分布式文件系統&#xff0c;為了保證系統的容錯性和可用性&#xff0c;HDFS采用了多副本方式對數據進行冗余存儲&#xff0c;通常一個數據塊的多個副本會被分布到不同的數據節點上。 如圖所示&#xff0c;數據塊1被分別存放到…

石油化工廠為什么要用專業防爆手機?

防爆手機之所以必須使用專業設計的產品&#xff0c;主要是出于安全考慮&#xff0c;以防止在易燃易爆環境中因手機使用不當引發爆炸事故。以下幾點詳細解釋了使用專業化工防爆手機的必要性&#xff1a; 本質安全設計&#xff1a;頂堅專業防爆手機采用了本質安全&#xff08;本安…

動手學深度學習(Pytorch版)代碼實踐 -計算機視覺-47轉置卷積

47轉置卷積 import torch from torch import nn from d2l import torch as d2l# 輸入矩陣X和卷積核矩陣K實現基本的轉置卷積運算 def trans_conv(X, K):h, w K.shapeY torch.zeros((X.shape[0] h - 1, X.shape[1] w - 1))for i in range(X.shape[0]):for j in range(X.shap…

昇思25天學習打卡營第5天|數據變換Transforms

數據變換Transforms 介紹Transforms分類Common TransformsVision TransformsText TransformsPythonTokenizer LookupLambda Transforms 參考 介紹 MindSpore提供不同種類的數據變換&#xff08;Transforms&#xff09;&#xff0c;配合數據處理Pipeline來實現數據預處理。 所有…

【ROS】apt 找不到 ROS版本?(ROS1和ROS2通用方案)

問題描述 安裝ROS底層系統時&#xff0c;經常遇到一個情況就是apt找不到ros的對應版本 解決方案 添加ros官方給的apt源和安裝密鑰 ROS1 # ros獎項 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.li…

數學建模 —— MATLAB中的向量

目錄 向量的創建方法 (1)直接輸入法 (2)冒號法&#xff08;常用&#xff09; (3)利用MATLAB函數創建 linspace函數 logspace函數 向量元素的引用 (1)單個元素引用 (2)多個元素引用 向量元素的修改和刪除 向量的創建方法 在 MATLAB中&#xff0c;向量的創建方法主要有…

微軟Edge瀏覽器多用戶配置文件管理:個性化瀏覽體驗

在家庭或工作環境中&#xff0c;經常需要在同一臺計算機上為多個用戶創建和管理獨立的瀏覽體驗。微軟Edge瀏覽器提供了多用戶配置文件管理功能&#xff0c;允許用戶為每個賬戶設置獨立的書簽、歷史記錄、密碼、擴展和設置。本文將詳細介紹如何在微軟Edge中管理多個用戶配置文件…

連接Sql Server時報錯:無法通過使用安全套接字層加密與 SQL Server 建立安全連接

JDBC連接Sql Server時報錯:無法通過使用安全套接字層加密與 SQL Server 建立安全連接 前言解決辦法一解決辦法二總結 前言 今天使用jdbc連接sql server突然報錯為&#xff1a;SQLServerException: “Encrypt”屬性設置為“true”且 “trustServerCertificate”屬性設置為“fals…

GoMate:配置化模塊化的Retrieval-Augmented Generation (RAG) 框架

文章目錄 GoMate簡介1.1 GoMate的核心技術文檔解析向量存儲嵌入模型問題查詢文本生成文檔更新 1.2 GoMate的應用領域智能客服知識庫構建內容生成教育培訓法律文書處理 GoMate的產品特色2.1 文檔解析2.2 向量存儲2.3 嵌入模型2.4 問題查詢2.5 文本生成2.6 文檔更新 GoMate的使用…

解決SPA(單頁應用)首屏加載速度慢

SPA是目前流行的前端開發模式&#xff0c;相對于傳統的多頁面用戶體驗更好&#xff0c;操作更順暢&#xff0c;開發效率也更高。但是SPA首屏加載速度慢一直是個致命的問題&#xff0c;由于SPA應用首次打開需要一次性加載大量的靜態資源&#xff0c;這就導致了加載速度慢的問題&…

監聽設備方向變化?分享 1 段優質 JS 代碼片段!

大家好&#xff0c;我是大澈&#xff01; 本文約 700 字&#xff0c;整篇閱讀約需 1 分鐘。 每日分享一段優質代碼片段。 今天分享一段 JS 代碼片段&#xff0c;用于在H5端監聽設備方向的變化。 老規矩&#xff0c;先閱讀代碼片段并思考&#xff0c;再看代碼解析再思考&#…

文件夾內-資源名稱前加序號排列

問題&#xff1a;在文件夾下的資源可以按時間排序&#xff0c;導入unity后資源順序會亂掉&#xff0c;不方便按順序賦值&#xff0c;為了方便&#xff0c;通過下面方法在文件夾下統一在資源名稱前按順序加上序號 win11在文件夾內右鍵&#xff0c;選擇——在終端中打開 輸入&a…

制造企業用AI可以做什么?

ChatGPT橫空出世&#xff0c;有關AI的浪潮席卷全球&#xff0c;比起人工智能如何改變世界&#xff0c;可能你更感興趣我能用AI可以做的事情是什么&#xff1f; 制造企業用AI可以做的事情是什么?人工智能在制造企業中可以做很多事情&#xff0c;以下是一些主要的應用&#xff1…