C++基礎語法學習1

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.面向對象編程:抽象 封裝 繼承 多態

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章