C++开发初级
1013 浏览 5 years, 11 months
3.1.10 编译器生成的构造函数的总结
版权声明: 转载请注明出处 http://www.codingsoho.com/编译器生成的构造函数的总结
编译器为每个类自动生成没有参数的构造函数以及复制构造函数。然而,您自己定义的构造函数可以取代这些构造函数,对应的规则如下表所示。
如果定义了.... | 那么编译器会生成..... | 然后可以创建一个对象 |
---|---|---|
没有定义构造函数 | 一个没有参数的构造函数,一个复制构造函数 | 使用没有参数的构造函数SpreadsheetCell cell; 作为另一个对象的副本 SpreadsheetCell myCell(cell) |
只定义了没有参数的构造函数 | 复制构造函数 | 使用没有参数的构造函数SpreadsheetCell cell; 作为另一个对象的副本 SpreadsheetCell myCell(cell) |
只定义了赋值构造函数 | 不会生成构造函数 | 理论上可以赋值其他对象,实际上无法创建任何对象 |
只定义一个构造函数(不是复制构造函数),该构造函数具有一个或多个参数 | 复制构造函数 | 使用带参数的构造函数SpreadsheetCell cell(6); 作为另一个对象的副本 SpreadsheetCell myCell(cell) |
一个没有参数的构造函数,以及一个具有单个或多个参数的构造函数(不是复制构造函数) | 复制构造函数 | 使用没有参数的构造函数SpreadsheetCell cell; 使用带参数的构造函数SpreadsheetCell myCell(6); 作为另一个对象的副本 SpreadsheetCell anotherCell(cell) |
注意: 默认构造函数和复制构造函数之间缺少对称。如果您没有显式定义一个复制构造函数,编译器就会自动生成一个。另一方面,只要您定义了任何一个构造函数,编译器就不会生成默认构造函数。
本章前面提到过,在C++11中可以通过显式默认或者显式删除影响自动生成的默认构造函数以及默认复制构造函数。