new对象时,类名后加括号与不加括号的区别
2015-04-11 15:51
316 查看
#include <iostream> using namespace std; // 空类 class empty { }; // 一个默认构造函数,一个自定义构造函数 class Base { public: Base() { cout << " default Base construct " << endl; m_nValue = 100; }; Base(int nValue) { cout << " custom Base construct " << endl; m_nValue = nValue; }; private: int m_nValue; }; // 一个默认复合构造函数 class custom { public: custom(int value = 100) { cout << " default && custom construct " << endl; m_nValue = value; } private: int m_nValue; }; void main() { empty* pEmpty1 = new empty; empty* pEmpty2 = new empty(); Base* pBase1 = new Base; Base* pBase2 = new Base(); Base* pBase3 = new Base(200); custom* pCustom1 = new custom; custom* pCustom2 = new custom(); delete pEmpty1; delete pEmpty2; delete pBase1; delete pBase2; delete pBase3; delete pCustom1; delete pCustom2; } // Result: /* default Base construct default Base construct custom Base construct default && custom construct default && custom construct */
加括号与不加的区别
(1)加括号
1. 若括号为空,即无实参项,那么理解为调用默认构造函数;
2. 若括号非空,即有实参项,可以理解为调用重载构造函数,或默认复合构造函数。
(2)不加括号
调用默认构造函数,或默认复合构造函数。
加空括号与不加括号的区别:对于自定义类型,调用的都是默认构造函数,没区别的。
只不过对于内建类型不太一样,加了扩号会做默认值初值化,比如:
int* p = new int;//p指向的int值是不确定的;
int* q = new int();//q指向的int值为0。
相关文章推荐
- 【转】new对象时,类名后加括号和不加括号的区别
- new对象时,类名后加括号与不加括号的区别
- new对象时,类名后加括号与不加括号的区别
- new对象时,类名后加括号与不加括号的区别
- new对象时,类名后加括号与不加括号的区别
- new对象时,类名后加括号与不加括号的区别
- new 对象加括号和不加括号的区别
- new 对象时加不加括号的区别(c++对象)
- JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)
- C++中new 一个对象的时候加括号和不加括号的区别
- php new 对象是否带括号的区别
- new对象加括号与不加的区别
- JAVA的newInstance()和new的区别(JAVA反射机制,通过类名来获取该类的实例化对象)
- C++ new 创建对象加不加括号的区别以及用new创建对象的特点
- php中new对象加括号和不加括号的区别
- new 一个对象的时候加括号和不加括号有什么区别
- new 对象时加不加括号的区别(c++对象)
- new 对象加括号和不加括号的区别
- new 对象加括号和不加括号的区别
- new 对象加括号和不加括号的区别