1. 程式人生 > >關於建構函式和普通函式的思考

關於建構函式和普通函式的思考

建構函式的特點:

  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 後面應該跟物件而不是方法)保持一致。

  為了貼我原有的程式碼採用了結構體做例子....雖然我知道類和結構體不一樣.......