關於建構函式和普通函式的思考
阿新 • • 發佈:2018-12-10
建構函式的特點:
1.使用方法: new fn();
2.建構函式會建立一個新的物件。
3.建構函式中的this指向的例項化的這個物件
4.返回值預設為物件
5.採用大駝峰式命名規則
普通函式的特點:
1.使用方法: fn();
2.不會例項化一個物件;
3.this指向的是呼叫此方法的物件
4.返回值是return 後面的引數
5.採用小駝峰式命名規則
關於建構函式的命名規則和普通函式的命名規則做一解釋:
類名採用大駝峰式書寫,函式和變數名採用小駝峰式書寫,按理來說建構函式也是函式,應該用小駝峰式命名,但是為什麼要用大駝峰式命名呢?因為建構函式要和類名保持相同。但是為什麼呢?
下面是我要實現連結串列的部分程式碼,假設建構函式採用小駝峰式命名規則如下所示:
template <class ElemType> struct Node { ElemType data; Node<ElemType> *next; node(); node(ElemType e, Node<ElemType> * link = NULL); }; template <class ElemType> Node<ElemType>::node() { next = NULL; }; template <class ElemType> Node<ElemType>::node(ElemType e, Node <ElemType> *link) { data = e; next = link; }; Node<ElemType> * p;
那我要例項化一個節點,你說我是用
p = new node<ElemType>();
還是用
p = new Node<ElemType<()呢
採用第一條語句是因為你建構函式是小駝峰式命名啊,但是new 後面應該跟物件,而node<ElemType>看起來更像是一個函式,在一個應該出現物件的地方你來一個函式是什麼鬼?
採用第二條語句是因為new 後面得跟一個物件啊,而Node<ElemType>看起來很直觀表示一個物件,但是,你這條語句沒在結構體裡面定義啊(定義的是node)。
所以,為了解決上述問題,將建構函式統一使用大駝峰式命名規則,以保持例項化時與邏輯思維(new 後面應該跟物件而不是方法)保持一致。
為了貼我原有的程式碼採用了結構體做例子....雖然我知道類和結構體不一樣.......