c++教程1快速入門

来源:https://www.cnblogs.com/testing-/archive/2023/12/28/17927488.html
-Advertisement-
Play Games

創建名為springboot_druid的新module,過程參考3.1節 5.1、引入相關依賴 註意:雖然本文使用的是 spring boot 2.7.18 和 MySQL 5.7 ,但是出於可移植性、可擴展性和相容性方面的考慮, druid 的啟動器使用的是 spring boot 3 版本的, ...


快速入門

歡迎來到令人興奮的C++編程世界。本章將演示如何創建簡單的C++程式,以及如何在程式中存儲數據。

  • C++簡介
  • 安裝編譯器
  • 編寫第一個程式
  • 編譯和運行程式
  • 創建變數
  • 使用變數數組
  • 使用向量數組
  • 聲明常量

1.1 C++ 簡介

C++是C編程語言的擴展,早在1972年由Dennis Ritchie首次在UNIX操作系統上實現。C是一種靈活的編程語言,至今仍很流行,被廣泛應用於從微控制器到最先進的科學系統等各種平臺。

C++是一種功能強大的編程語言(讀作 "see plus plus"),

C++由Bjarne Stroustrup博士於1983年至1985年在新澤西州AT&T貝爾實驗室工作期間開發。他在原始C語言的基礎上增加了一些功能,開發出了他所稱的"帶類的C語言"。這些類定義了具有特定功能的編程對象,將C語言的過程性質轉變為C++的面向對象編程語言。

C編程語言繼承了1970年左右問世的名為"B"的早期編程語言。因為編程中的++遞增運算符表示C++是C語言的擴展。

C++和C語言一樣,不依賴於平臺,因此可以在任何操作系統上創建程式。

1.1.1 為什麼要學習C++編程?

C++語言受到許多專業程式員的青睞,因為它可以讓他們創建快速、緊湊、健壯且可移植的程式。

使用現代C++集成開發環境 (IDE),如 Microsoft 的 Visual Studio Community Edition,程式員可以快速創建複雜的應用程式。但是,要想最大限度地使用這些工具,程式員必須首先學習一些有關C++語言本身的知識。

1.1.2 應該先學習C語言嗎?

本書不假定讀者以前掌握過任何編程語言,因此適合C++編程初學者,無論他們是否瞭解C語言。

如果您覺得在學習 C++ 之前先學習 C 語言編程會對您有所幫助,我們建議您在閱讀本書之前先嘗試一下《C 編程簡易教程》中的示例。

1.1.3 C++的標準化

美國國家標準協會(ANSI)和工業標準化組織(ISO)的聯合委員會定義了C++的標準版本。該版本有時被稱為ANSI C++,可移植到任何平臺和任何開發環境。

參考資料

1.2安裝編譯器

C++程式最初以純文本文件的形式創建,文件擴展名為".cpp"。這些文件可以用任何文本編輯器編寫,如Windows的記事本程式或Linux上的Vi編輯器。

為了執行C++程式,必須首先將其“編譯”成電腦可以理解的位元組代碼。 C++編譯器讀取程式的文本版本並將其轉換為機器可讀的可執行格式的第二個文件。

如果文本程式包含任何語法錯誤,編譯器將報告這些錯誤,並且不會構建可執行文件。

如果您使用Windows平臺並安裝了C++集成開發環境 (IDE),那麼您將已經擁有可用的C++編譯器,因為編譯器是可視化IDE的組成部分。 優秀的免費Microsoft Visual C++ Express IDE提供了編輯器視窗(可以在其中編寫程式代碼)以及用於編譯和執行程式的按鈕。 然而,在開始使用C++時,可視化IDE可能看起來很笨重,因為它們總是創建大量由高級程式使用的“項目”文件。

流行的免費GNU C++編譯器可根據通用公共許可證 (GPL) 條款免費提供。 它包含在大多數Linux操作系統發行版中。 GNU C++編譯器也可用於 Windows平臺,並用於編譯本書中的示例。

要瞭解系統上是否已安裝 GNU C++編譯器,請在命令提示符處鍵入c++ -v,然後按Return鍵。 如果可用,編譯器將返回版本信息。

$ c++ -v
Using built-in specs.
COLLECT_GCC=c++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 11.4.0-1ubuntu1~22.04' --with-bugurl=file:///usr/share/doc/gcc-11/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-11 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --enable-cet --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-11-XeT9lY/gcc-11-11.4.0/debian/tmp-gcn/usr --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-serialization=2
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 11.4.0 (Ubuntu 11.4.0-1ubuntu1~22.04)

GNU(發音為“guh-new”)項目於1984年啟動,旨在開發一個完全免費的類Unix操作系統。 GNU的一部分是“Minimalist GNU for Windows”(MinGW)。 MinGW包括GNU C++編譯器,可在Windows系統上使用它來創建可執行的C++程式。Windows用戶可以按照此處的說明下載並安裝GNU C++編譯器。

GNU C++ 編譯器可根據通用公共許可證 (GPL) 的條款和條件免費獲得,該許可證可線上找到 gnu.org/copyleft/gpl.html。可在https://sourceforge.net/projects/mingw/files/latest/download下載MinGW安裝程式mingw-get-setup.exe。

啟動安裝程式設置並接受“安裝管理器”對話框中建議的 C:\MinGW位置

MinGW C++編譯器是一個二進位可執行文件,位於C:\MinGW\bin。 為了允許從任何系統位置訪問它,現在應該將該文件夾添加到系統路徑。

1.3 編寫第一個程式"Hello World!"

#include <iostream>
using namespace std;

int main()
{
        cout << "Hello World!" << endl;
        return 0;
}

執行:

$ g++ hello.cpp -o hello
$ ./hello
Hello World!

編譯器會在原始源代碼文件旁邊創建可執行文件。預設情況下,該可執行文件在Windows系統中被命名為a.exe,在Linux中被命名為a.out。建議在編譯程式時使用-o選項,為可執行文件指定名字。

  • 預處理指令 - 這些指令由編譯器在程式代碼之前處理,所以必須總是出現在頁面的開頭。這裡,#include指示編譯器使用名為iostream的標準C++輸入/輸出庫,在< >角括弧之間指定庫名。下一行是"using指令",允許使用指定命名空間的函數,而不使用其命名空間首碼。iostream庫的函數屬於std命名空間--所以這個using指令允許諸如std::cout和std::endl的函數被簡單地寫成cout和endl。
  • 註釋 在//雙斜線之後單行中的所有內容都會被編譯器忽略。
  • Main函數 - 這是每一個C++程式的必經之路。程式可以包含許多函數,但必須始終包含main的函數,否則編譯器不會編譯該程式。可以選擇在函數名稱後面的括弧中指定逗號分隔的"參數"值列表,供該函數使用。main函數必須返回int。
    -語句 - 這些是程式運行時要執行的動作。語句必須以分號結束,。這裡,第一條語句調用cout庫函數來輸出文本和回車符endl。這些都是由<<輸出流操作符指向標準輸出的。請註意,C++中的文本字元串必須總是包含在雙引號中。最後一條語句使用了C++的return關鍵字來向操作系統返回零的整數值,傳統上,返回零值表示程式成功執行。

C++編譯器也支持在//-之間的多行C語言風格的註釋。

1.4 變數

變數是容器,其中的數據值可以存儲在電腦的記憶體中。存儲的值可以用變數的名稱來引用。

可以為變數選擇任何名稱,只要它遵守C++的命名規則--所選的名稱只能包含字母、數字和下劃線字元,但不能以數字開頭。另外必須避免使用C++關鍵字。選擇有意義的名字是很好的做法,可以使代碼更容易理解。

創建變數必須進行"聲明"(declared),指定它可能包含的數據類型和它選擇的名稱。變數聲明有這樣的語法。數據類型 變數名稱;

在C++中,名稱是區分大小寫的--因此名為VAR、Var和var的變數被視為三個單獨的變數。傳統上,C++的變數名是小寫的,很少以下劃線開始,因為一些C++庫使用這種慣例。
同一數據類型的多個變數可以在一個聲明中以逗號分隔的列表形式創建,其語法:數據類型 變數名1, 變數名2, 變數名3 。
下表列出了五種基本的C++數據類型,並附有簡要說明和示例內容。

char數據類型的字元值必須總是包含在單引號中,而不是雙引號。
變數聲明必須出現在可執行語句之前--這樣它們就可以在語句中被引用。
"初始化"是把值分配給變數時。也可以在聲明中對變數進行初始化。存儲在任何初始化變數中的值可以通過cout函數顯示在標準輸出上。

vars.cpp

#include <iostream>
using namespace std;

int main()
{
  char letter; letter = 'A';
  int number; number = 100;
  float decimal = 7.5;
  double pi = 3.14159;
  bool isTrue = false;

  cout << "char letter: " << letter << endl;
  cout << "int number: " << number << endl;
  cout << "float decimal: " << decimal << endl;
  cout << "double pi: "  << pi << endl;
  cout << "bool isTrue: " << isTrue << endl;

  return 0;
}

執行:

$ g++ vars.cpp -o vars
$ ./vars
char letter: A
int number: 100
float decimal: 7.5
double pi: 3.14159
bool isTrue: 0

布爾變數名建議以"is"開頭,這樣它們就能立即被識別為布爾變數。另外,對所有由多個單片語成的變數名使用"lowerCamelCase"--除了第一個單詞外,其他的都以大寫字母開頭,如"isTrue"。

1.5變數數組

數組是可以存儲多個數據項的變數。這些數據按順序存儲在數組的"元素"中,這些元素是有編號的,從0開始。因此,第一個值被存儲在元素0中,第二個值被存儲在元素1中,以此類推。

數組的聲明方式與其他變數相同,但另外還必須在聲明中指定數組的大小,在數組名稱後面的方括弧中。例如,聲明名為"nums"的數組來存儲六個整數:

int nums[6];

可以選擇在聲明數組時對其進行初始化,將每個元素的值以逗號分隔的列表形式用大括弧括起來。例如:

int nums[6] = { 0, 1, 2, 3, 4, 5 };

單獨的元素可以用數組的名稱和包含元素編號的方括弧來引用。這意味著nums[1]引用的是上面例子中的第二個元素--而不是第一個元素,因為元素編號從0開始。

可以為任何C++數據類型創建數組,但每個元素只能包含相同數據類型的數據。一個字元數組可以用來存儲一串文本,如果最後一個元素包含特殊的 \0 null字元。比如說

char name[5] = { 'm', 'i', 'k', 'e', '\0' };

數組中的元素統稱為"索引"。數組可以有一個以上的索引--代表多個維度,而不是普通數組的單維。三個索引以上的多維數組並不常見,但二維數組對於存儲基於網格的信息(如坐標)很有用。比如說

int coords[2] [3] = { { 1, 2, 3 } , { 4, 5, 6 } };

arrays.cpp

#include <iostream>
using namespace std;

int main()
{
  float nums[3]; // Declared then initialized.
  nums[0] = 1.5; nums[1] = 2.75; nums[2] = 3.25;

  // Declared and initialized.
  char name[5] = { 'm', 'i', 'k', 'e', '\0' };
  int coords[2] [3] = { { 1, 2, 3 } , { 4, 5, 6 } };

  cout << "nums[0]: " << nums[0] << endl;
  cout << "nums[1]: " << nums[1] << endl;
  cout << "nums[2]: " << nums[2] << endl;
  cout << "name[0]: " << name[0] << endl;
  cout << "Text string: " << name << endl;
  cout << "coords[0][2]: " << coords[0][2] << endl;
  cout << "coords[1][2]: " << coords[1][2] << endl;

  return 0;
}

執行:

$ g++ arrays.cpp -o arrays
(base) andrew@andrew-YTF-XXX:~/code/c++easy$ ./arrays
nums[0]: 1.5
nums[1]: 2.75
nums[2]: 3.25
name[0]: m
Text string: mike
coords[0][2]: 3
coords[1][2]: 6

1.6矢量數組

矢量是普通數組的替代品,它的優點是可以根據程式需要改變其大小。創建:vector < data-type > vector-name ( size ) 或vector < data-type > vector-name ( size , initial-value ) 。

vector.cpp

#include <vector>
#include <iostream>
using namespace std ;

int main()
{
  vector <int> vec(3,100) ;

  cout << "Vector size: " << vec.size() << endl ;
  cout << "Is empty?: " << vec.empty() << endl ;
  cout << "First element: " << vec.at(0) << endl ;

  vec.pop_back() ; // Remove final element.
  cout << "Vector size: " << vec.size() << endl ;
  cout << "Final element: " << vec.back() << endl;

  vec.clear() ; // Remove all elements.
  cout << "Vector size: " << vec.size() << endl;

  vec.push_back( 200 ) ; // Add an element.
  cout << "Vector size: " << vec.size() << endl ;
  cout << "First element: " << vec.front() << endl ;

  return 0 ;
}

執行:

$ g++ vector.cpp -o vector
$ ./vector
Vector size: 3
Is empty?: 0
First element: 100
Vector size: 2
Final element: 100
Vector size: 0
Vector size: 1
First element: 200

1.7常量

在程式執行過程中不會改變的數據應該存儲在常量容器中。這樣可以更好地讓編譯器檢查代碼中的錯誤--如果程式試圖改變存儲在常量中的值,編譯器就會報告錯誤,編譯就會失敗。

常量可以為任何數據類型創建,方法是在變數聲明前加上const關鍵字,然後再加上空格。通常情況下,常量名稱以大寫字母出現,以區別於小寫變數名稱。與變數不同,常量必須始終在聲明中被初始化。例如,數學pi值的常量聲明看起來像這樣。

const double PI = 3.1415926536;

enum關鍵字可以用簡潔的方式創建整數常量序列:

enum suit { CLUBS , DIAMONDS , HEARTS , SPADES };

除非指定,第一個常量的值為0,下一個常量的值為1,以此類推。一個常量可以被賦予任何整數值,但是列表中的下一個常量總是將其遞增為1。

有時將枚舉常量列表定義為"自定義數據類型"更方便的--通過使用typedef關鍵字。這可以作為枚舉聲明的開始,並且可以在聲明的末尾添加一個選定的類型名稱。例如,這個typedef語句創建了名為"charge"的自定義數據類型。

typedef enum { NEGATIVE , POSITIVE } charge;

然後可以用通常的方法創建自定義數據類型的變數,這些變數可以合法地分配給所列的任何常量。從本質上講,這些變數的作用就像int變數一樣--因為它們存儲的是被分配的常量所代表的數字整數值。例如,在上面的例子中,將一個POSITIVE常數分配給一個電荷變數,實際上分配了一個1的整數。

constant.cpp

#include <iostream>
using namespace std;

int main()
{
	const double PI = 3.1415926536;
	cout << "6\" circle circumference: " << (PI * 6) << endl;

	enum { RED=1, YELLOW, GREEN, BROWN, BLUE, PINK, BLACK };
	cout << "I shot a red worth: " << RED << endl;
	cout << "Then a blue worth: " << BLUE << endl;
	cout << "Total scored: " << (RED + BLUE) << endl;	

	typedef enum { NEGATIVE , POSITIVE } charge;
	charge neutral = NEGATIVE , live = POSITIVE;
	cout << "Neutral wire: " << neutral << endl;
	cout << "Live wire: " << live << endl; 
 
	return 0;
}

執行:

$ g++ constant.cpp -o constant
$ ./constant
6" circle circumference: 18.8496
I shot a red worth: 1
Then a blue worth: 5
Total scored: 6
Neutral wire: 0
Live wire: 1

小結

  • C++是一種面向對象的編程語言,是C語言的擴展。
  • GNU C++編譯器可用於Windows和Linux。
  • 預處理器指令用於使程式可以使用標準C++庫中的功能。
  • C++程式必須包含main方法作為程式的入口。
  • 語句定義了程式要執行的動作。
  • 建議對程式代碼進行註釋。
  • c++命令調用編譯器,其-o選項允許命令指定生成的可執行文件的名稱。
  • 變數聲明指定了數據類型和名稱,通過這個名稱可以引用該變數內的值。
  • cout函數是C++ iostream庫的一部分,它將內容寫到標準輸出控制台。
  • 數組是固定大小的變數,在元素中存儲多個數據項,這些元素的編號從0開始。
  • 特殊的\0字元可以分配給char數組的最後一個元素,使其被視為單一的文本字元串。
  • 矢量變數在元素中存儲多個數據項,並且可以動態地調整大小。
  • 存儲在數組或向量元素中的值可以使用該變數的名稱索引號來引用。
  • 永遠不會改變的變數值應該存儲在常量中。
  • 常量列表可以通過enum關鍵字自動編號,並通過typedef關鍵字給出類型名稱。
釘釘或微信號: pythontesting 微信公眾號:pythontesting
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程式,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹`SqlTableModule`組件的常用方法及靈活運用。在多數情況下我們需要使用SQL的方法來維護資料庫,但此方... ...
  • random.random random.random()用於生成一個0到1的隨機符點數: 0 <= n < 1.0 random.uniform random.uniform(a, b),用於生成一個指定範圍內的隨機符點數,兩個參數其中一個是上限,一個是下限。 如果a > b,則生成的隨機數n: ...
  • 通過列表生成式,我們可以直接創建一個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,創建一個包含100萬個元素的列表,不僅占用很大的存儲空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。 所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不 ...
  • 上次給大家介紹了 支付寶 v3 自簽名如何實現 ,這次順便再把驗簽也寫一下。 為什麼要驗簽 說起為什麼要驗簽,如果要詳細一點解釋的話,可以寫很多很多...... 我們就簡單一點來解釋:驗簽可以證明接收到的信息是支付寶給我的,不是被人中途攔截篡改數據之後再發給我的。 支付寶的通知分為 「同步通知 」和 ...
  • 最近有同學問我,做後端開發項目時用php,java,c#,go,pathon...哪個好,從最近阿裡雲、美團伺服器崩潰來看,我想給你最直接的回答是,沒有完美的,只有適合自己的。 ...
  • 概述:C++記憶體分配有棧、堆和靜態存儲區三種方式。棧自動管理,適用於局部變數;堆手動管理,使用new和delete;靜態存儲區適用於全局變數,具有整個程式生命周期。通過清晰的示例源代碼,詳細解釋了它們的分配方法和使用步驟。 C++的記憶體分配涉及棧、堆和靜態存儲區,每種分配方式有其獨特的特點。以下是對 ...
  • 本文分享自華為雲社區《java進行資料庫操作的併發控制》,作者:張儉。 在現代應用編碼中,從資料庫裡面find出來,進行一些業務邏輯操作,最後再save回去。即: Person person = personRepo.findById(id); person.setAge(18); personRe ...
  • LASSO(Least Absolute Shrinkage and Selection Operator)回歸模型一般都是用英文縮寫表示,硬要翻譯的話,可翻譯為 最小絕對收縮和選擇運算元。 它是一種線性回歸模型的擴展,其主要目標是解決高維數據中的特征選擇和正則化問題。 1. 概述 在LASSO中,通 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...