• 缺省构造函数(指没有参数的构造函数)
  • 构造函数能初始化对象,而缺省构造函数则可以不利用任何在建立对象时的外部数据就能初始化对象

关于缺省构造函数的问题

#include#includeusing namespace std;class Person{public:
	string name;
	Person(string str){
		name = str; //初始化姓名
	}
	~Person();
	
	};int main(){
	// Person student[2];
	/*
		报错,因为数组student[2]会调用无参构造函数,若类里面没有无参构造函数
		则会报错
	*/


	// 解决办法:
	//正确
	// Person student[]={
	// 	Person("xiaoming"),
	// 	Person("xiaohong"),
	// };

	// 或一个通用解决方案,定义一个指针数组替代
	typedef Person* STU;
	STU student[2]; //没有调用构造函数
	STU *student = new STU[2]; //没有调用构造函数


	/*
		注意使用new分配的内存要用delete进行删除,如果使用了普通的数组删除方法,
		那么你程序的运行将是不可预测的。这是因为:直接删除一个不是用 new 操作符来分配的内存指针,其结果没有被定义。
	*/
	return 0;}

关于缺省构造函数使用问题

  • 有缺省构造函数
    • 方便初始化对象(如vector a),但是提供无意义的缺省构造函数也会影响类的工作效率(如果成员函数必须测试所有的部分是否都被正确地初始化,那么这些函数的调用者就得为此付出更多的时间)
  • 没有缺省构造函数
    • 确保每一个对象的初始化有意义,比如学生对象要带上姓名等