构造函数的特点:
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 后面应该跟对象而不是方法)保持一致。
为了贴我原有的代码采用了结构体做例子....虽然我知道类和结构体不一样.......