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關鍵字直接引入命名...