前往
大廳
主題

【程式筆記】0320 C++物件導向程式設計

乂巧天琴乂 | 2024-03-20 16:24:53 | 巴幣 1010 | 人氣 126

Prototype(原型)是什麼:
只定義函式名稱和傳入的參數,不寫函式執行的內容。

class中定義prototype的例子:
以下是一個node類別,有2個屬性,整數no和node類型的指標變數。
class node{
int no;
node *ptr;
public:
int readA(); // 執行的程式碼寫在類別的外面
void writeA(int); // 只定義了參數的資料型態,名稱可以不用寫
...
};
readA()和writeA(int)就可以說是prototype。

原型就像在封面頁上寫了「數學」的空白筆記本,
打算要拿來寫數學筆記,但是裡面還是一片空白的概念。

為什麼要這麼做?
1. 整個函式的內容可能超級多,全部寫出來不易讀,也不好找到想要看的函式。
2. c++必須先宣告函式,才能呼叫函式,也就是最先用到的函式必須寫在最上面,按照順序寫下來。
有了prototype以後,就可以實現函式自由,你愛寫哪就寫哪,寫在main(){}底下也沒差。
這邊就要說一下,Dart本來就可以把函式宣告、定義在呼叫函式之下,好爽。

那方法(筆記內容)到底要寫在哪裡?
可以在class外面才定義類別的方法內容,也可以寫在類別裡面。

在class外面定義的語法:
回傳值型態 類別名稱::函式名稱(){方法內容}
int node::readA(){
return no;
}

void node::writeA(int a) { // int a 這裡寫了參數名稱,原型中沒寫
no = a;
}

constructor 建構子是什麼?
在類別中跟類別名稱一樣的方法。

用來初始化,當類別物件被建立的時候自動執行。
沒有parameter(參數)的建構子,稱為defult constructor。
class中裡面一定要有一個一個constructor。
如果沒有建立建構子,系統會自動建立一個,不會執行任何動作的建構子(空的函式)。

早期C++不能寫int no = 0;
宣告跟寫入是兩回事,因為還沒建立no物件,無法寫入值。
所以需要建構子,在類別定義完、物件產生以後,寫入初始值。
但現在int no = 0;是合法的了。

Destructor 解構子
在類別中函式名稱為 ~類別名稱() 的方法。

物件被消滅的時候執行的內容,
沒有建立的話,系統也會自動建立。

動態記憶體配置:程式執行ing才跟電腦索取記憶體
新增指令: new
刪除指令:delete
動態新增整數例子:
int *p = new int;
分2行的寫法:
int *p;
p = new int;

函式多載:允許相同名稱的函式存在

但是參數列內的參數數量必須不一樣 ok!
或資料型態不一樣 ok!
或參數數量一樣,但對應的位置的資料型態不一樣 ok!
int f(int, float);
int f(float, int);
這兩個函式f()可以多載!

運算子多載:重新定義運算子的函式,用於自訂的資料型態。

有兩種寫法:
方法1. 寫在class外面
定義兩個node類別相加
int operator+(node &p, node &q){ // operator+
return(p.getNo()+q.getNo());
}
&p和&q的意義:參數列中變數前面加&,代表傳參考,傳進來的是node物件,在函式中的以別名p,q代稱
函式內容:把p跟q物件的no值相加後回傳
回傳( 用p物件中的getNo()方法,讀取p物件no的值,加上,用p物件中的getNo()方法,讀取q物件中的no的值 )

呼叫函式:
cout << "*" << (*head)+(*t) << endl; // operator+
因為是動態記憶體配置,所以傳入的是指標,指向物件的位址

方法2. 寫在class裡面,代表每個物件都內建-這個函式
class node() {
public:
int operator-(node &p) {return no+p.no}
}
函式內容:自己的no值和傳入的p物件的no值相加。
重新定義了減號,雖然是減號但是裡面的函式可以任意改變,這裡就是用減號執行相加的運算。

呼叫函式:
cout << "*" << (*head)-(*t) << endl; // operator-
注意:雖然-函式只要求傳入1個參數,但是呼叫時還是要寫出2個運算元(要計算的東西)。
第1個運算元(*head)是呼叫-的物件,第2個(*t)是傳入(*head)物件-方法的參數p。
(*head)中的-方法會把(*head)的no值,和(*t)的no值相加後回傳。

送禮物贊助創作者 !
0
留言

創作回應

北之夜玥
原型(Prototype)、建構子(Constructor)、解構子(Destructor)、動態記憶體配置以及運算子多載(Operator Overloading)等概念的詳細解釋都是C++程式設計的重要基礎概念。說明清晰易懂,範例也很貼切對於剛學習C++的應該會有很大的幫助
2024-03-22 01:32:19
乂巧天琴乂
謝謝你 GPT 我的超人
2024-03-22 15:49:47

更多創作