- A+
所属分类:C++
如存在一个类MyClass
class MyClass { public: MyClass() { std::cout << "Hello MyClass!" << std::endl; } MyClass(int i):num(i) { std::cout << "Hello MyClass!------int" << std::endl; } void MyMethod() { std::cout << "输出成员num: " < } private: int num; };
创建对象的方法
MyClass a; //直接在栈上创建
MyClass *a= new MyClass(); //在堆上创建,栈上有指针变量指向堆内存
MyClass *a = new MyClass;//
MyClass a();//由上面几种很自然联想到这一种,这里只是声明了一个返回值为MyClass类型的无参函数,并不是创建对象的方式
加括号和不加括号的区别
//定义在栈上(系统自动回收,不用delete)
MyClass c1;//调用无参的构造函数,或者有默认参数值的构造函数。
MyClass c2();//声明一个返回值为MyClass类型的函数而已 ,不构建对象,不调用任何构造函数
MyClass c3(1);//调用参数为int的构造函数
//定义在堆上 (系统不会自动回收,需要delete)
(1)自定义类型。对于自定义类型来说没有区别,new时候是否加括号,都是使用默认构造函数
MyClass *c4 = new MyClass();//num=随机数
MyClass *c5 = new MyClass(1); //num=1
MyClass *c6 = new MyClass;//num=随机数
(2)内置类型。对于内置类型来说加括号会初始化为系统默认值
int *pint2 = new int(); //值为0
int *pint1 = new int(1); //值为1
int *pint3 = new int;//值为随机数
什么时候使用初始化列表
所有成员变量的初始化都必须使用初始化列表
父类的初始化(调用父类构造函数)必须使用初始化列表