再探C++——默认成员函数

这篇具有很好参考价值的文章主要介绍了再探C++——默认成员函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、构造函数

二、析构函数

三、赋值运算符

四、拷贝构造


如果一个类中没有成员,我们称为空类。空类,也存在6个默认的类成员函数。

默认成员函数:用户不显示地写,编译器会默认生成的函数叫做默认成员函数。

6个默认成员函数:
构造函数:完成对象初始化               析构函数:完成对象清理

拷贝构造:用同类对象构造新类        赋值重载:把一个对象赋给另一个对象

取地址重载:很少涉及

一、构造函数

在C语言中,一个数据结构的模拟首先要完成初始化,就拿栈举例子:

初始化要确定top,确定开辟的空间,和数组的初始容量。如果没有完成这一初始化会出现诸多问题,为了防止遗忘类的初始化,引入构造函数。

在类的创建时自动调用,用来进行初始化。

1.特性:

1)名称与类名相同,没有返回值。

2)不是开空间创建对象,是在实例化后自动调用。

3)可以重载

拿日期类举例子

.构造函数可以是重载   重载要注意二义性

再探C++——默认成员函数,C++,c++,开发语言

.关于重载的调用

再探C++——默认成员函数,C++,c++,开发语言

在调用无参构造函数时 不可写成  Date d1();否则编译器将认为这是一个函数声明

.在函数重载中给缺省值

关于带参函数给全缺省,那么它与无参构造函数都为默认构造函数,不需要用户显示调用,编译器就能初始化。

默认构造函数只能出现一个,全缺省不能与无参构造函数同时出现。

 在类中既有无参构造函数和全缺省构造函数,编译器能通过编译 但在创建对象时会出现二义性,不知道调用哪个函数,会出错。

5)编译器会生成默认的构造函数

如果用户没有自己显示的实现一个构造函数,那么编译器会生成一个无参的默认构造函数。

编译器生成的默认构造函数特点:

内置类型初始化为随机值自定义类型会调用其的构造函数。

再探C++——默认成员函数,C++,c++,开发语言

 类B的默认构造函数在初始化时aa时,会调用A的构造函数,而b初始化为随机值。

6)初始化列表

再探C++——默认成员函数,C++,c++,开发语言

 对于引用和const类型的对象,在定义时必须进行初始化,而构造函数的函数体为赋值语句,无法进行初始化;

因此引入初始化列表,在对象创建时即完成初始化工作。

初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个"成员变量"后面跟
一个放在括号中的初始值或表达式

再探C++——默认成员函数,C++,c++,开发语言

 注意:

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

引用和常对象,需要传参的自定义类型必须在初始化列表中初始化;

初始化列表的初始化顺序只与类对象声明顺序有关;

二、析构函数

在一个类对象结束,要进行动态内存的释放。为了防止用户遗忘,引入析构函数,在对象生命周期结束时,自动调用,完成对象的内存清理工作。

再探C++——默认成员函数,C++,c++,开发语言

 特性:
1)函数名为 类名前加~  (表示与构造函数相对)

2)没有参数 ,没有返回值

3)编译器会生成默认构造函数
与构造函数一样,用户没有显示写析构函数时,编译器会自动生成析构函数

内置类型不做回收自定义类型调用的析构函数。

4)调用顺序类似栈结构,创建的类,调用析构函数。

三、赋值运算符

C++为了增强代码的可读性,引入赋值运算符=

赋值运算是针对俩个已经存在的类;

关键字:operator =  有函数参数和返回值

再探C++——默认成员函数,C++,c++,开发语言

 

特性:

1)在用户不显示写时,编译器会生成默认赋值运算符,其的特点是浅拷贝

浅拷贝:将目标一个字节一个字节的拷贝给目的地

涉及一块空间的拷贝不能用浅拷贝:同一块空间不能连续释放两次;因此用户自定义赋值运算符重载就非常有必要。

2)返回值是T&,减少传值的拷贝,可以连续拷贝   

     参数类型const T&  防止被错误修改

3)隐藏第一个参数this指针  ,检查拷贝的来源是否为自己

3)不可重载为全局函数

全局函数没有this指针,需要传所有参数

四、拷贝构造

将已经存在的类,拷贝给一个新类;

其是构造函数的一个重载

再探C++——默认成员函数,C++,c++,开发语言

 在传参时必须用引用接收参数;

否则 不带引用;会发生无限递归

要拷贝构造就要传参  传参就要调用拷贝构造  调用拷贝构造就要传参 ..........会发生无限递归

1)用户不显示写时,编译器会产生默认拷贝构造函数,是浅拷贝;

在涉及动态空间时,必须显示实现一个拷贝构造函数,否则会发生同一块空间释放俩次;

2)对象返回时,能返回引用,尽量返回引用,提高效率;

区别拷贝构造和赋值的调用

再探C++——默认成员函数,C++,c++,开发语言

 拷贝构造是一个存在的类对象,赋值是俩个类都存在;

———————————————————————————————————————————

本期的C++默认成员函数的介绍就到这。还有俩个默认的成员函数,但是基本上用不到 ,就不做介绍,对于构造函数是重要的一项,希望本文对大家有所帮助!文章来源地址https://www.toymoban.com/news/detail-625719.html

到了这里,关于再探C++——默认成员函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++:类的六个默认成员函数

    个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C++》 本篇博客作为C++知识总结,我们来认识类的六个默认成员函数。 下面我主要以日期类作为示例显示。 构造函数 是一个特殊的成员函数,名字与类名相同,创建类类型对象时(实例化类)由编译器自动调用,以保

    2024年02月08日
    浏览(50)
  • C++中类的6个默认成员函数 【拷贝构造函数】

    在前几章学习对象的时候,我们有的时候需要一个与已存在对象一某一样的新对象 那在创建对象时,可否创建一个与已存在对象一某一样的新对象呢? 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时

    2024年02月20日
    浏览(51)
  • C++ ------类和对象详解六大默认成员函数

    如果我们定义一个类,然后这个类中什么也没有。那么这里的类就什么也没有吗?其实不然,任何类在里面什么都不写时,编译器都会生成6个默认成员函数。 用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 六个默认成员函数 我们来看一个Date类 观察上述代

    2024年02月15日
    浏览(50)
  • 【C++】类和对象(中篇)----->六大默认成员函数

    目录 一、类的6个默认成员函数 二、构造函数  1、概念   2、特性 三、析构函数  1、概念  2、特性 四、拷贝构造函数  1、概念  2、特征 五、赋值运算符重载  1、运算符重载  2、值运算符重载    2.1 赋值运算符重载格式    2.2 赋值运算符只能重载成类的成员函数不能

    2024年02月12日
    浏览(40)
  • 【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)

    🔥 个人主页: Forcible Bug Maker 🔥 专栏: C++ 目录 前言 类的6个默认成员函数 构造函数 概念 构造函数的特性及用法 析构函数 概念 析构函数的特性及用法 结语 本篇主要内容:类的6个默认成员函数中的 构造函数 和 析构函数 进入到类和对象内容的第二节,上篇博客中介绍了

    2024年04月16日
    浏览(52)
  • 【C++干货基地】六大默认成员函数: This指针 | 构造函数 | 析构函数

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 : 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!   哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作

    2024年03月11日
    浏览(44)
  • ⚡【C++要笑着学】(7) 默认成员函数:构造函数 | 析构函数 | 拷贝构造函数

    🔥 订阅量破千的火热 C++ 教程 👉 火速订阅 《C++要笑着学》   🔥 CSDN 累计订阅量破千的火爆 C/C++ 教程的 2023 重制版,C 语言入门到实践的精品级趣味教程。 了解更多: 👉  \\\"不太正经\\\" 的专栏介绍  ← 试读第一章 订阅链接: 🔗 《C语言趣味教程》 ← 猛戳订阅!   本篇

    2024年02月07日
    浏览(64)
  • C++从入门到精通——类的6个默认成员函数之拷贝构造函数

    类的6个默认成员函数:如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 在现实生活中,可

    2024年04月26日
    浏览(47)
  • 【C++类和对象】类有哪些默认成员函数呢?(下)

    ヾ(๑╹◡╹)ノ\\\" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ\\\" 如果一个类中什么成员都没有,简称为空类。 空类中并不是什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 ​​​​​​​​ 默认成员函数:用户没有显式实现,编译器会生成

    2024年02月12日
    浏览(46)
  • [C++]默认成员函数等——喵喵要吃C嘎嘎3

    希望你开心,希望你健康,希望你幸福,希望你点赞! 最后的最后,关注喵,关注喵,关注喵,大大会看到更多有趣的博客哦!!! 喵喵喵,你对我真的很重要! 目录 前言 类的实例化 类对象模型 如何计算类对象的大小 类对象的存储方式猜测 this指针 C语言和C++实现Stack的

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包