C 入門必掌握知識點總結

2021-09-20 10:18:29 字數 4863 閱讀 4182

c with classes : 類及派生類、公有和私有成員、類的構造和析構、友元、內聯函式、賦值運算子過載等。

c++ 1.0:新增虛函式概念,函式和運算子過載,引用、常量等。

c++ 2.0:更加完善支援物件導向,新增保護成員、多重繼承、物件的初始化、抽象類、靜態成員以 及const成員函式。

c++ 3.0:進一步完善,引入模板,解決多重繼承產生的二義性問題和相應構造和析構的處理。

c++ 98:c++標準第乙個版本,絕大多數編譯器都支援,得到了國際標準化組織(iso)和美國標準化 協會認可,以模板方式重寫c++標準                   庫,引入了stl(標準模板庫).

c++ 03:c++標準第二個版本,語言特性無大改變,主要:修訂錯誤、減少多異性。

c++ 05c++標準委員會發布了乙份計數報告(technical report,tr1),正式更名c++0x,即:計 劃在本世紀第乙個10年的某個時間發布。

c++ 11:增加了許多特性,使得c++更像一種新語言,比如:正規表示式、基於範圍for迴圈、auto 關鍵字、新容器、列表初始化、標準線                程庫等。

c++ 14:對c++11的擴充套件,主要是修復c++11中漏洞以及改進,比如:泛型的lambda表示式, auto的返回值型別推導,二進位制字面常量

c++ 17:在c++11上做了一些小幅改進,增加了19個新特性,比如:static_assert()的文字資訊可 選,fold表示式用於可變的模板,if和                     switch語句中的初始化器等。

c++ 20:  馬上出。

1.關鍵字

2.命名空間(乙個新作用域)

為避免命名衝突,而設定的命名規則,即把變數、函式名和類等名稱定義在乙個命名域內,對識別符號進行本地化操作。

1)定義

關鍵字 namespace   +   命名空間名稱

//定義命名空間l

namespace l

}

命名空間可以巢狀定義:

//定義命名空間l

namespace l

namespace n //n為l內的命名空間

}

同乙個工程中允許存在多個相同名稱的命名空間 ,編譯器會自動把他們和在同乙個命名空間內。

2)命名空間的使用(三種方式)

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

使用using將命名空間中成員引入

使用using namespace 命名空間名稱引入     

#include using namespace std;   //方式3

namespace li

}using li::a; //方式2

void namespace_test()

3.c++輸入 & 輸出(cin   cout)

使用cout標準輸出(控制台)和cin標準輸入(鍵盤)時,必須包含< iostream >標頭檔案以及std標準命名空 間。

使用c++輸入輸出更方便,不需增加資料格式控制,比如:整形--%d,字元--%c

編譯器可自動識別輸入引數型別,來調整標準輸入/輸出。

#include using namespace std;

int main()

double add(double left, double right)

long add(long left, long right)

int main()

程式在編譯器中的編譯過程:main.c

1)預處理://巨集替換、標頭檔案展開、條件編譯、去掉注釋  --> 生成  main.i  檔案

2)編譯:// 檢查語法、生成會變**   --->  生成 main.s 檔案

3)彙編:// 把彙編**轉換成機器碼  ---> 生成  main.o  檔案

名字修飾規則:

c語言編譯時對函式名只是前面加上下劃線,來區分函式,所以不支援函式過載。

c++的名字修飾規則不僅針對函式名,還有函式引數的型別相比比較複雜。根據這兩點來區分函式。

在不同編譯器下,底層的修飾規則不同。

extern 「c「:

有時候在c++工程中可能需要將某些函式按照c的風格來編譯,在函式前加extern "c",意思是告訴編譯器,將 該函式按照c語言規則來編譯

extern "c" int add(int left, int right);

int main()

6.引用

概念:定義乙個變數的引用就是給已存在的變數起個別名,等於它和最早的變數名指向同一塊記憶體。

型別& 引用變數名(物件名) = 引用實體( int&  b = a), 注意:引用型別必須和引用實體是同種型別的。

特性:引用在定義時必須初始化;乙個變數可以有多個引用;乙個引用只能作用乙個實體。

引用只能指向變數,不能指向常量,引用和實體之間型別必須相同。

#include using namespace std;

void swap(int& left, int& right)

int main()

引用作為函式返回值時,應注意其生命週期。

int& add(int a, int b) 

int main()

int main()

巨集 的優缺點:

優點:1.增強**的復用性。 2.提高效能。

缺點:1.不方便除錯巨集(因為預編譯階段進行了替換) 2.導致**可讀性差,可維護性差,容易誤用。3.沒有型別安全的檢查 。

常見巨集函式的書寫:

//使用巨集,寫max比較函式

#define max(a, b) (a) > (b) ? (a) : (b)

//使用巨集, 寫add函式

#define add(a, b) (a) + (b)

//使用巨集, 寫swap函式

#define swap(a, b) \

(b) = (a) + (b); \

(a) = (b) - (a); \

(b) = (b) - (a);

巨集與內聯函式的區別

(1)內聯函式在編譯時展開,巨集在預編譯時展開; 

(2)編譯內聯函式可以嵌入到目標**,巨集只是進行簡單的字串替換; 

(3)內聯會做型別和語法檢查,而巨集不具有這樣的功能; 

(4)inline函式是函式,而巨集不是函式; 

(5)巨集定義處理巨集引數時存在邊界問題(一般引數都要用括號括起來),而內聯函式定義不會出現這樣的問題。

巨集與函式的選擇

以下情況選擇巨集,其他情況選擇函式:

(1)用巨集代表簡短的表示式時;

(2)在考慮效率的時候,可以考慮用巨集或者內聯函式;

(3)在標頭檔案保護(防止重複編譯)的時候,如:條件編譯中的#ifdef、#if defined以及assert的實現。

8.aotu關鍵字

c++11中:auto不再是乙個儲存型別指示符, 它作為乙個新的型別指示符來,auto宣告變數時,必須指向乙個已經指定型別的變數。

int main()

注:1. auto不能作為函式的引數

2.auto不能直接用來宣告陣列。

3.auto不能定義類的非靜態成員變數。

4.例項化模板不能使用auto作為模板引數。auto缺點:可讀性差。

9. 基於範圍的for迴圈

基本含義:解決迴圈範圍說明的問題。

for(     :       )  :分為兩部分:1.第一部分是範圍內用於迭代的變數。2.第二部分則表示被迭代範圍。

#include using namesapce std;

int main()

; for(auto& e : array)

e *= 2; //在陣列的範圍內實現每個數乘2

for(auto e : array)

count << e << " " << endl;

return 0;

}

注:與普通迴圈型別,可以用continue來結束本次迴圈,也可用break來跳出整個迴圈。

10.指標空值nullptr(c++11)

c語言中:空指標用null來表示,而null是用0定義的巨集。  是int型,不合適用來表示指標。

int* p1 = null;  int* p2 = 0;   0 和 null 兩個是一樣的東西。

c++11:使用nullptr來表示控指標,它是char型的。

int* p = nullptr;  //nullptr-->(void*)型別

C語言必掌握知識點

個人總結,學c的趕快看 1 a 和 a 的區別 a 先加在賦值 a 先賦值在加 後者賦給變數b的值為a而不是a 1後的值 2 按位與 同為1時為1,其他為0 如 1110 1010 1010 按位或 同為0時為0,其他為1 如 1110 1010 1110 3 非運算 按位取反 如 1111 000...

Java入門必掌握知識

一.常量 其值在程式的執行過程中不發生改變的量。分類 1字面值常量2自定義常量 字面值常量的分類 1字串常量2整數常量3小數常量4字元常量5布林常量6空常量 二.二進位制 0,1組成,以0b開頭 八進位制 以0開頭 十進位制 整數預設是十進位制 十六進製制 以0x開頭 x可以大寫 三.十進位製到任意...

C 入門知識點

一 命名空間 用c 語言編寫大型軟體時,較多的變數和函式以及其他命名很可能會發生重複的狀況,命名空間恰好解決了這一問題,使用命名空間對名稱進行劃分,不容易混淆名稱。c 標準庫的命名空間為std,以標準庫命名空間為例,看一下命名空間的三種使用方法。1 用using和namespace關鍵字直接引入命名...