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.面向對象程式設計:抽象 封裝 繼承 多态