C++ 基本概念

介紹

C 和 C++ 有許多共同的特色,並且 改良C 的資料抽象化與繼承

C++ 有效範圍

  • 檔案的有效範圍
    不是在函式定義、類別定義、名稱空間裡出現的宣告,都屬於此範圍。

  • 名稱空間的有效範圍
    標準資料庫(standard-library) 定義在一個 std 的名稱空間裡。

  • 區域有效範圍
    區域 {} 內所宣告的名稱有效範圍僅止於此區塊。

  • 類別有效範圍
    類別相關定義的宣告就屬於該類別的有效範圍。

C++ 資料宣告

  • 常數值(constant)
    包含5、a、4.3這樣的文字(literal)。

  • 變數(variables)
    這是資料型態的實例,程式執行時隨時都能改變其值

  • 常數變數(constant variables)
    無法在使用期間改變其值,必須初始化(initialized)。

    1
    const int MAX = 100;
  • 列舉類型(enumeration types)
    藉由給定列舉類型一個名字來創造新的資料型態

    1
    enum semester{SUMMER,FALL,SPRING};

    SUMMER , FALL , SPRING 為 semeter 型態的常數。內定值分別為 0 、 1 、 2 。

  • 指標(pointer)
    存取物件記憶體位址

    1
    2
    3
    int i = 25:
    int *np;
    np = &i;

C++ exception exercise

1.修改程式讓它丟出一個型態為 int 的例外。如果 a 、 b 、 c 都小於 0 的話,那麼丟出的例外值應該是 1 ;如果這三個數都等於 0 的話,那麼丟出的值為 2 。如果以上的狀況不滿足,就不丟出任何例外。寫一個main函式來利用你改過的程式碼,有例外被丟出就捕捉它,並且根據丟出來的例外值輸出一個適當的訊息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int DivZero(int a, int b, int c) {
if (a < 0 || b < 0 || c < 0)
throw 1;
if (a == 0 || b == 0 || c == 0)
throw 2;
return a + b * c + b / c;
}

int main() {
try {
cout << DivZero(2, 0, 4) << endl;
}
catch (int e) {
if (e == 1)
cout << "All parameters can't be < 0" << endl;
if (e == 2)
cout << "All parameters should be > 0" << endl;
}
return 0;
}

2.寫一個 C++ 的函式來回傳一個整數陣列 a 和前 n 項和。在 n < 0 的情況下你的函式應該要丟出一個例外。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int sumOfFirstN(int n, int a[]){
if(n < 0)
throw "parameters can't be < 0";

int x = 0;
for(int i = 0; i <= n; i++){
x += a[i];
}
return x;
}

int main(){
int a[] = {1, 2, 3, 4, 5, 6};
int n = 5;

try{
cout << sumOfFirstN(n, a) << endl;
}
catch(const char* e)
{
cout << e << endl;
return 1;
}
return 0;
}