今天突然疑惑了,构造函数和定义对象的时候是怎么一一对应的呢?
直接拿c++ primer里的例子说吧,书上说得很好,可惜太凌乱。
1. Sales_item si;
调用默认构造函数
2. Sales_item si("abc");
调用重载的构造函数
3. Sales_item si();
这是错误的定义方法,但是VS里面竟然不报错,而是把si当成了unsigned short,而且调试根本到不了这句话。总之,记住就好了。
4. Sales_item *si = new Sales_item();
5. Sales_item *si = new Sales_item;
4和5的区别在于4是显式的值初始化,而5则不作初始化。对于这个小小的差别,如果Sales_item 不是内置类型则4和5都会调用默认构造函数,而内置类型比如int就会使得si成为0或者没初始化的任意值。
6. Sales_item *si = new Sales_item("abc");
特别的构造函数:
直接拿c++ primer里的例子说吧,书上说得很好,可惜太凌乱。
// 预留
1. Sales_item si;
调用默认构造函数
2. Sales_item si("abc");
调用重载的构造函数
3. Sales_item si();
这是错误的定义方法,但是VS里面竟然不报错,而是把si当成了unsigned short,而且调试根本到不了这句话。总之,记住就好了。
4. Sales_item *si = new Sales_item();
5. Sales_item *si = new Sales_item;
4和5的区别在于4是显式的值初始化,而5则不作初始化。对于这个小小的差别,如果Sales_item 不是内置类型则4和5都会调用默认构造函数,而内置类型比如int就会使得si成为0或者没初始化的任意值。
6. Sales_item *si = new Sales_item("abc");
特别的构造函数:

