本文共 1506 字,大约阅读时间需要 5 分钟。
c++ primer plus 学习心得
第10章 对象和类默认构造函数是在未提供显示初始值时,用来创建对象的构造函数。也就是说,它是用于下面这种声明的构造函数
Demo demo1; // 使用默认的构造函数Demo *pDemo = new Demo; // 使用默认的构造函数
这条语句管用的原因在于,如果没有提供任何构造函数,则c++将自动提供默认构造函数。
默认的构造函数没有参数,因为声明中不包含值。
当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数。为类定义了构造函数后,程序员就必须为它提供默认构造函数,如果提供了非默认构造函数,但是没有提供默认构造函数,则下面的声明将会出错。
Demo demo; //这个会报错
#includeusing namespace std;class Demo { int age;#if 0 Demo (int age) { this->age = age; }#endif};int main(int argc, char *argv[]){ Demo d1; return 0;}
结果编译通过,正常
#includeusing namespace std;class Demo { int age;#if 1 Demo (int age) { this->age = age; }#endif};int main(int argc, char *argv[]){ Demo d1; return 0;}
结果编译报错,没有默认的构造函数。
#includeusing namespace std;class Demo { int age;public: Demo () { };#if 1 Demo (int age) { this->age = age; }#endif};int main(int argc, char *argv[]){ Demo d1; return 0;}
这个编译能够通过!
定义默认的构造函数有两种方式:
1. 是写一个没有参数的默认构造函数。就是上面3 所使用的这种方式 2. 给已有构造函数所有的参数提供默认值!#includeusing namespace std;class Demo { int age;public: //Demo () {};#if 1 Demo (int age = 10) { this->age = age; }#endif};int main(int argc, char *argv[]){ Demo d1; return 0;}
这样编译也不会报错!
PS:
Demo d1();------>这种形式不是创建一个对象,而是声明一个函数,返回的对象为Demo
代码资料的路径
转载地址:http://peyci.baihongyu.com/