1.命名空間 namespace
爲什麼要使用命名空間:一箇中大型軟件往往由多名程序員共同開發,會使用大量的變量和函數,不可避免地會出現變量或函數的命名衝突。當所有人的代碼都測試通過,沒有問題時,將它們結合到一起就有可能會出現命名衝突。
::作用域限定符 用來限定變量的所屬域
2.c++中可以使用 for(int i = 0; i <10; i++)循環,C語言中會語法報錯,此時i不算被定義,之後不可使用
3.register關鍵字請求“編譯器”將局部變量存儲於寄存器中
C語言中無法取得register變量地址
在C++中依然支持register關鍵字
1、C++編譯器有自己的優化方式,不使用register也可能做優化
2、C++中可以取得register變量的地址
C++編譯器發現程序中需要取register變量的地址時,register對變量的聲明變得無效。
C++中若對register變量取地址,則該變量不再是寄存器變量,系統自動爲其分配地址,變爲普通變量
4.未初始化的全局變量爲0,爲初始化的局部變量爲垃圾值,C語言中可以對全局變量重複定義,C++中不可以對全局變量進行重複定義
5.結構體加強在c++中結構體相當於是一種數據類型,如struct Test{};,定義時可以寫成Test t;
6.函數參數:C語言中print()可以接受任意個參數,print(void)沒有參數
c++中,返回值必須要有類型,即函數必須有類型,形參有無void都一樣,都不能傳入參數
7.新增bool型,bool a = true a則爲1,bool型的值只能是0或1
8.條件表達式:C語言中 :
int a = 1, b = 2;
int c = (a > b) ? a : b;
此時條件表達式的返回值是一個常量2,而不是b這個變量,所以條件表達式不能是左值,因爲常量不能被賦值
可以通過 (a > b) ? &a : &b來返回一個地址來作爲左值
c++中條件表達式可以作爲左值,返回的是變量本身
9.c++中,const int a = 1, a是一個常量,存在與編譯器的符號表中,不佔用內存,
int *p = (int*)&a 操作系統則會分配四個字節來存放1,但是與a無關,a是一個常量,用1來替換
const與define的區別:兩者作用域不同
const int a = 1 //a是一個局部變量,函數內部有效
#define b 1 //宏,代碼從這一行向下都有效
10.c++中的引用
引用可以看作一個已定義變量的別名
引用的語法:Type& name = var;
#include <stdio.h>
int main()
{
// 定義一個int型變量a,在內存中佔4個字節,
// 變量名 a 就代表了這一塊內存,或者說 a 是這塊內存的別名
int a = 10;
// 定義了一個引用變量 b ,它是 a 的別名,和 a 代表同一塊內存空間
// 對 b 的操作 和 對 a 的操作是一樣的
int& b = a;
// 改變 b 等於改變了 a
b = 20;
printf ("%d, %d\n", a, b);
// a 與 b 代表同一塊內存空間
printf ("%p, %p\n", &a, &b);
return 0;
}
普通引用在聲明時必須用其它的變量進行初始化
普通引用一定要初始化,相當於給a這段內存取了別名叫b
11.int a[10] = {0}; a是一個常指針,不能改變,a++是不成立的
c++中 char &a;a爲常指針,佔4個字節
引用只能引用一次,即int &a = b後,不能出線對a的其他賦值
12.引用的意義
#include <stdio.h>
void swap1 (int &a, int &b)
{
int tmp = a;
a = b;
b = tmp;
}
void swap2 (int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 10;
int b = 20;
swap2 (&a, &b);
swap1 (a, b);
printf ("%d, %d\n", a, b);
return 0;
}
1)引用作爲其它變量的別名而存在,因此在一些場合可以代替指針
2)引用相對於指針來說具有更好的可讀性和實用性
13.const
const int *p; 就近原則,const離*近,所以不能改變*p,及不能改變其值
int *const p;const離p近,p不能改變
const int* const p;兩者都不能變
14.不能返回局部變量的引用,與返回局部變量的地址類似,函數運行結束後,參數空間都會被釋放
15.常引用:
①不能用常量初始化引用(常量不佔內存)
②const int &b = 1;常引用可用常量來初始化,系統分配4個字節,存入1,常引用不能修改
③可用變量初始化常引用
16.默認參數
一旦使用了默認參數,之後的參數必須使用默認參數,否則產生歧義
佔位參數,留個位置,減少改動
int add(int x, int y, int = 0, int = 0)
17.函數重載
①參數個數不同
②參數類型不同
③參數順序不同
返回值不能構成重載,重載函數遇到默認參數可能出現歧義
18.面向對象編程:抽象 封裝 繼承 多態