5.4 C++ 程式語言介紹
C++ Language
Class:
1 | 格式: class class_name |
Object 宣告, 操作
class _ object;
操作:
object.att.
object.op.
- Ex:
1 | int main() { |
建構子 (Construtor)
- Def:
- 對 object 做 初始化 的動作
- 於 object 產生時呼叫
- Constructor name 和 class name 相同, 且 No return type
- Constructor 可有很多個
- Ex:
1 | class A { |
解構子 (Destructor)
- Def:
- 於 constructor 之前加上 “~”
- Destructor 不接收參數 parameter list 為空
- class 中 destructor 只會有一個
- 於 object 被回收時呼叫
- Ex:
1 | Class A { |
變數種類
格式:
static _ type _ variable;
static int x;
- Ex:
1 | int main() { |
-
Note:
- 靜態變數存於靜態區塊中, “不會隨著所屬 block 結束而回收”, 於程式結束回收
- 靜態變數之宣告只於第一次執行, 之後忽略之
-
Ex:
1 | class A { |
問 output is?
C++ 參考變數 Reference Variable
格式:
type **&**var = **被參考變數** (不可省略)
int &count = x;
-> 替 x 取別名叫 count
注意事項:
- int count; (X) 替某人取綽號叫 count, 但某人不存在
- int &count = 3; (X) 常數(No mem space)
宣告時
int x;
=> call by value (一般)
int *x;
=> call by address (指標)
int &x;
=> call by reference (參數)
操作時
x
=> 取內容
*x
=> 取指標指向的值
&x
=> 取所在 address
1 | int main() { |
Q:
1. a, b 呼叫 swap 後為何 No change? (call - by value)
2. How to modifiy?
C++ 的 Inheritance
- Ex:
1 | class A { |
補充:繼承的存取權限
Overriding 覆載
- 子類別將父類別的函式重新定義以符合自身所需
Overloading 多載
分為:
-
function overloading
-
藉由接收多數串列的數量或型別不同以達到共用相同的函式名稱
- Ex1:
- 對 user 而言較方便, 不需記過多的 function name
- 對 programmer 而言命名 function 亦可簡化其原則
1
2
3print(2); -> void print(int i)
print(3.5); -> void print(double d)
print("abc"); -> void print(char *s)- Ex2:
1
2
3
4
5
6class Person {
public:
Person() {...} // 建構子
Person(int h) {...} // 建構子
Person(inth, int w) {...} // 建構子 Overloading
} - Ex1:
-
-
operator overloading
- Def: 藉由接收的運算元型別不同, 以達共用相同的運算子(operator)符號
- 概念:
- 3 + 5 => int + int
- 2.3 + 5.5 => double + double
- matrix + matrix
this vs super
- 為 C++ 內建提供的物件指標
- 其中:
- this 會指向物件本身
- super 會指向物件的 parent class
- 說明:
物件指標
- 物件指標指向 attribute or operator
ex: this -> i; - (*物件指標).attribute or operator
ex: (*this).i;
- Ex: this.i … 錯誤 (成大)
因為 “.” priority > “*”
所以 括號不能拿掉
(*(&(*this))).i; = (*this).i
- 為從 address 拿回值
& 為拿出 address
- 為從 address 拿回值
- EX:
- EX2 (政大):
1 | void A(int V1, int V2) |
Polymorphism 多型
- Def :
- 多型主要是於執行時期利用動態繫結的方式來呼叫需執行的 function => 執行時才動態決定
- C++ 中一般的函式呼叫於 compile time (state binding)已決定, 其呼叫位址 => 故無法達到多型
- 在 C++ 中多加入一keyword virtual 來註明函式為 virtual function => 已達多型之效
- 圖:
- 利用父類別型態 (須為指標或參數, 不能為一般變數)
- 接收不同子類別的物件
- 做相同的動作
- 引發不同的行為(同名異式)
- Ex1:
- NOTE: Polymorphism => Inheritance(:) + Overriding + Virtual function
1 | // Virtual 一抽掉, 就永遠印出 An.walk |
- Ex2: 政大
1 | class Base |
問:
- Derive two class from Base(繼承), and for each define iam() to write out the name of the class (override).
Sol:
1 | class D1: public Base |
- Create objects of these classes(物件宣告), and call iam() for them(物件操作).
Sol:
1 | int main() |
- Assign pointers to objects of the derived class to Base *pointers and call iam() through those pointers.
Sol:
1 | int main() |