0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++:详谈构造函数

如意 来源:百家号 作者:cherrydreamsover 2020-06-29 11:44 次阅读

构造函数

1.概念

构造函数:一个特殊的成员函数,名字与类名相同,创建类类型对象的时候,由编译器自动调用,在对象的生命周期内只且调用一次,以保证每个数据成员都有一个合适的初始值。

2.构造函数的特性

函数名和类名相同;

没有返回值;

有初始化列表(可以不用);

新对象被创建,由编译器自动调用,且在对象的生命周期内仅调用一次;

构造函数可以重载,实参决定了调用哪个构造函数;

如果没有显示的调用时,编译器会提供一个默认的构造函数;

无参构造函数和带有缺省值的构造函数都认为是缺省构造函数,并且缺省构造函数只能有一个;

构造函数不能用const修饰(因为const修饰类的成员函数时,该函数不能修改成员变量,但是构造函数要修改类的成员变量,因此不可以由const修饰)

3.初始化列表

C++:详谈构造函数

以冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在圆括号中的初始化式。

4.初始化顺序

数据成员在类中定义的顺序就是参数列表中的初始化顺序;

初始化列表仅用于初始化数据成员,并不指定这些数据成员的初始化顺序;

每个成员在初始化列表中只能出现一次;

尽量避免使用成员初始化成员,成员初始化顺序最好和成员的定义顺序保持一致。

类中包含以下成员必须要放在初始化列表中初始化:

(1)引用数据类型

(2)const数据类型

(3)类类型成员(该类没有缺省的构造函数)

5.默认构造函数

默认构造函数使用与成员变量初始化相同的规则初始化成员,对于内置类型和复合类型的成员,如组、指针,只对定义在全局定义作用于的对象初始化,对于局部作用域的内置和复合类型不作初始化。

6.构造函数的作用

构建对象

初始化对象

类型转换

7.explcit

用explicit修饰构造函数,抑制由构造函数定义的隐式转换,explicit关键字类内部的构建声明上,在类的定义体外部的定义上不再重复。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72901
  • 构造函数
    +关注

    关注

    0

    文章

    5

    浏览量

    2724
收藏 人收藏

    评论

    相关推荐

    高质量c++ c编程指南

    ......................................................................................................... 56第8 章 C++函数的高级特性
    发表于 06-27 10:22

    没有调用静态对象的C ++构造函数

    你好,我试图使用SPC5 Studio和免费的gcc vle工具链(4.9.2)在SPC560Bxx mcu中使用C ++。但是,看起来构造函数不像我预期的那样被调用。在下面的例子中,我希望最终
    发表于 09-18 16:40

    请问STM32 C++构造函数怎么修改才能实现全局变量的初始化呢?

    在STM32F10X项目中使用了C++的特性,使用arm-none-eabi-g++编译,程序可以正常运行。问题: C++定义的全局变量,其类的构造函数不被执行,在
    发表于 10-10 08:45

    C++对象指针不会执行构造函数是什么原因?

    谁能指点一下,指针也是一个对象啊!为什么这个对象不会执行构造函数呢?
    发表于 03-23 04:37

    C++的二阶构造函数不会报错

    为什么 TwoPhaseCons* obj = TwoPhaseCons::NewInstance();不会报错??????????TwoPhaseCons* obj = TwoPhaseCons::NewInstance();这句话是绕开了构造函数去执行NewInsta
    发表于 03-23 01:30

    在 STM32 上使用 C++ 指南

    C++ 进行了系统初始化, 在特定的 BSP 目录下,连接脚本文件 link.lds 为 C++ 全局构造函数的代码分配了段,使 C++
    发表于 04-21 17:29

    如何把C++的源程序改写成C语言

    方法的与程序逻辑本身的无关性。下面对C++的一些特性,以及如何在c里实现或者替代,作一些初步的探讨:说明:函数Ixx为类xx的构造函数的实现
    发表于 07-05 14:59

    如何深度解析C++拷贝构造函数详细资料说明

    本文档的主要内容详细介绍的是如何深度解析C++拷贝构造函数详细资料说明。
    发表于 07-05 17:41 0次下载
    如何深度解析<b class='flag-5'>C++</b>拷贝<b class='flag-5'>构造</b><b class='flag-5'>函数</b>详细资料说明

    Linux共享库的构造函数和析构函数

    共享库有类似C++构造和析构函数函数,当动态库加载和卸载的时候,函数会被分别执行。一个函数
    的头像 发表于 06-22 09:18 2099次阅读
    Linux共享库的<b class='flag-5'>构造</b><b class='flag-5'>函数</b>和析构<b class='flag-5'>函数</b>

    C++详谈拷贝构造函数

    只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰),这样的构造函数称为拷贝构造函数。拷贝构造
    的头像 发表于 06-29 11:45 1921次阅读
    <b class='flag-5'>C++</b>:<b class='flag-5'>详谈</b>拷贝<b class='flag-5'>构造</b><b class='flag-5'>函数</b>

    C++详谈析构函数的特性和使用

    构造函数功能相反,在对象被销毁时,由编译器自动调用,完成类的一些资源清理和汕尾工作。
    的头像 发表于 06-29 11:53 2163次阅读
    <b class='flag-5'>C++</b>:<b class='flag-5'>详谈</b>析构<b class='flag-5'>函数</b>的特性和使用

    C++之拷贝构造函数的浅copy及深copy

    C++编译器会默认提供构造函数;无参构造函数用于定义对象的默认初始化状态;拷贝构造
    的头像 发表于 12-24 15:31 526次阅读

    C++之继承中构造和析构学习的总结

    在我们前面学习过类中的构造函数,以及析构函数,那么自然而然,在继承关系中,必然是存在着析构和构造着。一、子类对象的构造1、问题的引出如何初始
    的头像 发表于 12-24 16:10 591次阅读

    c++构造函数学习的总结(一)

    关于这个构造函数,简单理解就是在一个类中,有一个函数,它的函数名称和类名同名,而且这个构造函数
    的头像 发表于 12-24 18:06 540次阅读

    浅析C++执行构造函数编程实例

    C++保证在你调用delete时,先自动调用析构函数(而我们安排在这个函数里面删除它的法杖、法袍等对象),再删除对象占用的内存。
    发表于 03-03 15:44 173次阅读