第一种是类成员中有成员是类对象,并且该成员的类含有默认构造函数,那么C++编译器会帮你给这个类也生成一个默认构造函数,用来调用其成员对象的构造函数,完成该成员的初始化构造.需要强调的是,如果这个成员的类也没有给出默认构造函数,那么C++编译器也不会帮你生成该类的默认构造函数.         第二种情况是这个类的基类有默认构造函数.那么C++编译器也会帮你生成该派生类的默认构造函数,以调用基类的默认构造函数,完成基类的初始化.另外还得强调一下的是,如果基类没有提供这个默认构造的函数,那么C++编…
//构造函数调用规则 #include <iostream> using namespace std; //1.创建一个类,C++编译器会给每个类添加至少3个函数 //默认构造(空实现) //析构函数(空实现) //拷贝函数(值拷贝) //2.如果我们写了有参构造函数 编译器就不会提供默认构造函数 但是会提供拷贝构造函数 //3.如果我们写了拷贝函数 编译器就不再提供 默认 有参 构造函数 class Person { public: Person() //默认构造函数 { cout <…
之前在上C++的课的时候,印象中有那么一句话:如果一个类没有任何构造函数,那么编译器会生成一个默认的构造函数 今天在看<深度探索C++对象模型>的第二章:“构造函数语意学”的时候发现之前听到的说法是错误的. 比如说如下代码: class A {public: int a;}; int main(void) { A a; a.a = 4; A a2; a2.a=5; return 0;}123456789101112按照之前的说法,类A没有任何构造函数,编译器会自动生成一个默认的构造函数,但事实…
1. 默认初始化 如果定义变量时没有指定初值,则变量会被默认初始化,此时变量被赋予了"默认值". 对于类类型的变量来说,初始化都是依靠构造函数来完成的.因此,即使定义某个类的变量(对象)时没有提供初始化式,我们也能通过类的默认构造函数来完成初始化.即,"默认值"由默认构造函数来决定(前提是该类有默认构造函数). 对于内置类型的变量来说,当定义没有初始化式的变量时,系统有时会帮我们初始化变量."默认值"由定义的位置决定:定义于任何函数体之外的变量被…
构造函数:C++用于构建类的新对象时需要调用的函数,该函数无返回类型!(注意:是“无”! 不是空!(void)). 默认构造函数:未提供显式初始值时,用来穿件对象的构造函数. 以上是二者的定义,但是单从定义很难对二者进行区别,下面依然看代码. class testClass { public: testClass(); /* 默认构造函数 */ testClass(int a, char b); /* 构造函数 */ testClass(,char b='c'); /* 默认构造函数 */ pr…
参考文献: 1.黄邦勇帅 2.http://www.cnblogs.com/graphics/archive/2012/10/02/2710340.html 3.http://blog.csdn.net/pnhuangyu/article/details/12352073 分三个部分: 一.基础 二.什么时候需要默认构造函数 三.默认构造函数将成员初始化为了什么值 一.基础 1.没有参数的构造函数是默认构造函数,默认构造函数只有一个. 2.如果用户没有自己声明构造函数,C++将提供一个默认的构造…
前言: 在C++中,对于一个类,C++的编译器都会为这个类提供四个默认函数,分别是: A() //默认构造函数 ~A() //默认析构函数 A(const A&) //默认拷贝构造函数 A& operator = (const A &) //默认赋值函数. 这四个函数如果我们不自行定义,将由编译器自动生成这四个缺省的函数,下面让我们来看看这四个函数(重点是后两个). 一. 构造函数 构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行.构造…
今天看书,忽然发现自己对默认构造函数/构造函数的理解很模糊,在实际项目中写类时,这些细节问题并没有涉及到.因此,就专门对着<C++ Primer Plus>将默认构造函数/构造函数这一块简单总结一下. 构造函数:C++用于构建类的新对象时需要调用的函数,该函数无返回类型!(注意:是“无”! 不是空!(void)). 默认构造函数:未提供显式初始值时,用来穿件对象的构造函数. 以上是二者的定义,但是单从定义很难对二者进行区别,下面依然看代码. class testClass { public:…
对于C++默认构造函数,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数. 合成默认构造函数会初始化类中所有的数据成员. 第一个误解来自于我学习C++的第一本书 <C++ Primer>,在书中392页:“只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数”. 实际上这句话也没有说错,它说明了默认构造函数定义的必要非充分条件,然而却给当时初学C++的我造成了一定的误解. 第二个误解依旧来自于Primer中的一句话:“合成的…
大多数C++书籍都说在我们没有自己定义构造函数的时候,编译器会自动生成默认构造函数.其实这句话我一直也是 深信不疑.但是最近看了一些资料让我有了一点新的认识. 其实我觉得大多数C++书籍之所以这样描述其实是玩了文字游戏的.如果说编译器自动产生的默认构造函数对于我们 的类没有任何作用,也就是说在编译器默认生成的这个构造函数里根本没有任何实质性的代码工作,那么这种默认构 造其实是可有可无的,所以不妨说编译器其实是为每个类生成了默认构造函数的. 在深度探索C++对象模型中讲了四种关于编译器自动生成默认…