默认构造函数

C++中构造函数默认参数使用 一代码 #include <iostream> using namespace std; class Box{ public: Box(int h=2,int w=2,int l=2);//在声明构造函数时指定默认参数 int volume(); private: int height,width,length; }; Box::Box(int h,int... 阅读详情
有些C++类图书在介绍构造函数的时候会提及,当没有定义构造函数的时,编译器会提供默认的构造函数,这个函数什么事情都不做,其内容类似于"{}"的形式,但是实际情况是,编译器不会在任何情况下都提供默认的构造函数.在许多情况下,编译器并没有提供的默认构造函数,而是经过O2选项优化编译后,某些结构简单的类会被转换为几个连续定义的变量,

前面的学习过程中 我们,我们也碰到了在类对象定义过程中没有触发构造函数的情况
如下代码所示:

main反汇编代码如下所示:

在上图中,对象Init的定义处没有任何对应的汇编代码,也没有构造函数的调用过程,可见编译器并没有为其提供默认的构造函数.那么,在何种情况下编译器会提供默认的构造函数呢?

有以下2种情况:
(1)本类,本类中定义的成员对象或者父类中有虚函数存在
由于需要初始化虚表,且这个工作理应在构造函数中隐式完成,因此在没有定义构造函数的情况下,编译器会添加默认的构造函数用于隐式完成虚表的初始化工作
(2)父类或者本类中定义的成员对象带有构造函数
在对象被定义时,由于对象本身为派生类,因此构造顺序是先构造父类在构造自身,当父类中带有构造函数时,将会调用父类构造函数,而这个调用过程需要在构造函数内完成,因此编译器添加了默认构造函数来完成这个调用过程,成员对象带有构造函数的情况与此相同.

除了以上情况外,提供默认构造函数没有任何意义,只会降低程序的执行效率,因此VC++6.0没有对这种情况下的类提供默认的构造函数....
c++ 类的默认构造函数 保研之旅结束,现在可以按下心来学点以前没有时间深入学习的事情。以前为了写算法可以用c++的标准模板库,就学了c++,但是一直没有深入的学习下去,对c++的很多特性不是很熟。今天,来讲讲类的默认构造函数中的一些知识点。   首先,我创建了animal 类,代码如下: class animal{ private: int m_age; string m_sex; public: // a 阅读详情

相关推荐

【C++】类的默认构造函数

类的默认成员函数 文章目录类的默认成员函数1. 构造函数2. 默认构造函数 1. 构造函数 初始化类 函数名与类名相同 无返回值 对象实例化时编译器自动调用对应的构造函数 构造函数可以重载 我们测试一下对象实例化时编译器自动调用对应的构造函数 #include <iostream> using namespace std; class Date { public: //含参的构造函数 Date(int year = 0, int month = 0, int day = 0)

Rinne's blog 3167

C++默认构造函数的问题

C++ defaul construct :缺省构造函数默认构造函数)   定义:第一种   构造函数没有参数,即是 A()形式的   第二种   构造函数的全部参数由缺省值提供,A(int a=0,int b=0)   编译器添加的默认构造函数的条件:   如果创建一个类你没有写任何构造函数,则系统会自动生成默认的无参构造函数,函数为空,什么都不做(这只是一种情况而言,此构造函数是trival   派生类和基类的关系:   我们通常说的派生类和基类,我们调用派生类的自定义的构造函数的时候,派生类会自动调用基类中的default construct函数,而不能调用基类中的其他构造函

构造函数 默认构造函数

1. 构造函数 2. 默认构造函数 用于在未提供显示初始值时创建对象并初始化,如: stock stock0; 2.1 定义默认构造函数的两种方式 给已有的构造函数的所有参数提供默认值 通过函数重载来定义——一个没有参数的构造函数 ...

sinat_28924869的博客 718

C++构造函数、虚函数

一:构造函数 基本构造函数: 执行过程:1)传参 2)给类数据成员开辟空间 3)执行冒号语法给数据成员初始化 4)执行构造函数括号里面的内容 例如: class Base{ public: # 冒号语法后面的内容相当于int a = 10;(初始化) Base(int var) : m_Var(var){ } private: int m_...

qq26983255的博客 1967

C++学习——构造函数、析构函数

C++中有一种特殊的成员函数,它的名字和类名相同,可以有形参,但没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。析构函数(Destructor)是一种特殊的成员函数,它的名字是在类名前面加一个符号,没有返回值,没有参数,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。

主要记录嵌入式学习与开发过程。 6053

【Effective C++】构造/析构/赋值运算

文章目录一、了解C++默默编调用了哪些函数1、编译器默认调用的函数2、请记住二、若不想使用编译器自动生成的函数,就该明确拒绝1、拒绝编译器自动生成的函数2、请记住三、为多态基类声明virtual析构函数1、普通的基类的指针指向派生类的对象2、virtual析构函数的作用3、请记住四、别让异常逃离析构函数1、析构函数中发生异常有什么问题?2、请记住五、绝不在构造和析构过程中调用virtual函数1、...

青萍之末的博客 479

VC++中复制构造函数与 CPtrArray 类

我们都知道,如果我们类中有指针成员变量,需要自己重写深层复制构造函数,来完成堆中内存的重新分配。如果类中有一个 CPtrArray 类呢?这个类只保存指向数据所在内存的指针,并不保存实际数据值。我们不能直接调用 CPtrArray::Copy 或 CPtrArray::Add 或 CPtrArray::Append 来完成拷贝,(当然更不能用 “=” ,这个类根本就没有重载等于操作符)。上面所说的

沐浴晨风想一想,今天该怎样努力;踏着夕阳问一问,今天学到了什么。 2430

C++构造函数

1 构造函数的定义及特征 构造函数是类的一种特殊成员函数,其主要作用是对类的成员进行初始化,保证每个类成员都有一个合适的初始值。 构造函数有以下特征: 函数名与类名一致 没有返回值 对象实例化时自动调用对应的构造函数 支持函数重载 构造函数语法:类名(){} 需要注意的是, 没有返回值和返回值为空是两码事。返回值为空指的是该函数有返回值,其中返回值为void类型。而支持重载则说明,在一个类中,可以同时存在多个构造函数。 在代码段1中,People类提供了两个构造函数,其中第一个是无参构造函数,第二个是有

乌有先生ii的博客 8269

什么是默认构造函数

对于C++默认构造函数,我曾经有两点误解: 类如果没有定义任何的构造函数,那么编译器(一定会!)将为类定义一个合成的默认构造函数。 合成默认构造函数会初始化类中所有的数据成员。 第一个误解来自于我学习C++的第一本书 《C++ Primer》,在书中392页:“只有当一个类没有定义构造函数时,编译器才会自动生成一个默认构造函数”。实际上这句话也没有说错,它说明了默认构造函数定义的必要非充分条件,然而

熊俊坤的博客 1万+

【C++】构造函数调用规则 ( 默认构造函数 | 默认无参构造函数 | 默认拷贝构造函数 | 构造函数调用规则说明 )

一、默认构造函数 1、默认无参构造函数 2、默认拷贝构造函数 二、构造函数调用规则 1、构造函数规则说明 2、代码示例 - 只定义拷贝构造函数 3、代码示例 - 只定义有参构造函数

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6431

【C++】默认构造函数

摘要 默认构造函数(default constructor):类通过一个特殊的构造函数来控制默认初始化过程,这个函数称为默认构造函数默认构造函数无须任何实参。 合成的默认构造函数 如果我们的类没有显示地定义构造函数,那么编译器就会为我们隐式地定义一个默认构造函数。这个由编译器创建的构造函数又称为合成的默认构造函数(synthesized default constructor) 合成的默认构造...

zzy0006的博客 4227

C++默认构造函数

定义: 默认构造函数(default constructor)就是在没有显式提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有的形参提供默认实参的构造函数定义。如果定义某个类的变量(对象)时没有提供初始化式就会使用默认构造函数。 合成的默认构造函数 如果我们的类没有显示地定义构造函数,那么编译器就会为我们隐式地定义一个默认构造函数。这个由编译器创建的构造函数又称为合成的默认构造函数(synthesized default constructor) 合成的默认构造函数只适合非常简单的类,

居老师的博客 4793

默认构造函数构造函数重载

本文主要总结了默认构造函数的相关用法和构造函数重载,旨在能够对平时的项目开发起到一定的夯实基本功的作用,言简意赅,一目了然。首先需要了解构造函数是用来做什么?该类对象被创建时,编译器为对象分配内存空间,并自动调用该构造函数,由构造函数完成数据成员的初始化工作。一、默认构造函数 从代码层面进行分析 class testClass { public : testClass();//不带参数的默认

syeming的编程专栏 1万+

C++关于默认构造函数和无参构造函数

C++关于默认构造函数和无参构造函数 默认构造函数 在不提供任何构造函数的情况下,编译器给出一个不带参数的,不包含代码的构造函数。 #include<iostream> using namespace std; class A { public: int val; }; int main(){ A a; //这里调用的是默认构造函数 cout<<a.val<<endl; return 0; } 当已经提供了显式的构造函数,例如:

qq_38600065的博客 8812

C++构造函数默认构造函数

参考博客:https://blog.csdn.net/china_jeffery/article/details/79288103#commentBox 以下内容是在上述博主的博客中提炼出来的: 一、默认构造函数的含义是啥: 主要就是:默认构造函数在调用的时候不需要显示传入实参的构造函数 二、默认构造函数的分类 1、无参构造函数:就是没有参数的构造函数 class Sample ...

Littlehero_121的博客 3115

类的默认构造函数

如果没有为一个类显式地定义任何构造函数,编译器将自动为这个类生成默认构造函数。 由编译器创建的默认构造函数称为合成的默认构造函数,它将依据如下规则初始化类中的成员变量: 1.内置数据类型的初始化 内置数据类型是否自动初始化取决于变量定义的位置。如果变量在全局作用域内定义(即不在任何函数中)或定义为静态局部变量,则这些成员将被初始化为0。如果变量在局部作用域内定义,则这些成员没有初始化。 2

菜鸟达人 1万+
上一篇: C++中的空类,默认产生哪些类成员函数
下一篇: 判断单链表是否有环,判断两个链表是否相交
eric_arrow
博客等级 码龄14年 65粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值