iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++类的默认成员函数有哪些
  • 608
分享到

C++类的默认成员函数有哪些

2023-06-29 05:06:47 608人浏览 八月长安
摘要

本文小编为大家详细介绍“c++类的默认成员函数有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++类的默认成员函数有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。类的默认成员函数每个类中,如果不主动实

本文小编为大家详细介绍“c++类的默认成员函数有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++类的默认成员函数有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    类的默认成员函数

    每个类中,如果不主动实现默写特定函数,类中也会自动去生成这些函数,它们就是默认成员函数。默认成员函数分为六种,它们是特殊的成员函数,如果我们不实现,编译器会自己实现。

    C++类的默认成员函数有哪些

    下面将对这些函数一 一进行介绍。

    构造函数

    概念

    构造函数的作用即为初始化,相当于平时我们自己写的Init函数,但在对象实例化时会自动调用,以保证实例化对象一定初始化。

    特性

    (1)函数名与类名相同

    如日期类Date,其构造函数名也为Date

    (2)无返回值

    以日期类为例,其构造函数的声明和定义可以写成如下样子:

    class Date{public:Date(int year = 0, int month = 1, int day = 1);private:int _year;int _month;int _day;};class Date{public:Date(int year = 0, int month = 1, int day = 1);private:int _year;int _month;int _day;};
    Date::Date(int year, int month, int day){_year = year;_month = month;_day = day;}

    (3)对象实例化时编译器自动调用对应的构造函数

    为了验证这一点,我们创建一个对象,但不对其进行其它操作:

    int main(){  Date date1;return 0;}

    C++类的默认成员函数有哪些

    C++类的默认成员函数有哪些

     通过调试可以发现对象date1已经被自动初始化了。

    (4)构造函数可以重载

    (5)如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数,一旦用户显式定义,编译器将不再自动生成。

    (6)无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个。

    针对第五点,我们不免会发出疑问,编译器自动生成的默认构造函数究竟干了什么呢?

    首先,需要先了解C++把类型分为两类:内置类型(基本类型)和自定义类型。

    内置类型就是C语言自带的类型,如int、char、double、指针、内置类型的数组;而自定义类型就是strucrt和class定义的类型。

    编译器默认生成的构造函数,对于成员变量中的内置类型不做初始化,对于自定义类型成员变量则会调用它的默认构造函数初始化,如果没有默认构造函数则会报错。

    析构函数

    概念

    析构函数的功能是完成对象中资源的清理。虚构函数会在对象的生命周期到了之后调用。

    特性

    (1)析构函数名是在类名前加上字符~。

    (2)无参数无返回值。

    日期类析构函数的声明可以写成如下形式:

    ~Date();

    (3)一个类有且只有一个析构函数。若喂显式定义,系统会自动生成默认的析构函数。

    (4)对象生命周期结束时,C++编译系统自动调用析构函数。 

    对于编译器自动生成的默认析构函数,与构造函数类似,对于内置类型成员变量不做处理;对于自定义类型成员变量会去调用它的构造函数。

    拷贝构造函数

    概念

    拷贝构造函数用于使用同类型对象去初始化实例对象。

    特征

    (1)拷贝构造函数是构造函数的一个重载形式。

    (2)拷贝构造函数的参数只有一个且必须使用引用传参,使用传值的方式会引发无穷递归调用。

    日期类拷贝构造函数的声明需要写成如下形式:

    Date(Date& date);

    为什么必须采用引用传参呢?引发无穷递归又是怎么一回事呢?

    不妨来思考一下,传参实际上也是对内容进行临时拷贝,将实参传给形参本身就需要调用拷贝构造。由此一来,会导致不断调用拷贝构造,造成无穷递归调用。

    (3)若未显式定义,系统会生成默认的拷贝构造函数了。

    默认拷贝构造函数对于内置类型成员,会完成按字节序的拷贝(浅拷贝),如果需要深拷贝则需要自己写拷贝构造函数;对于自定义类型成员,则会调用它的拷贝构造函数。

    所谓按字节序拷贝指将内存中的内容照搬照抄,复制过来。在一些情况下就会出错,如存放申请内存地址的指针,如果按字节序拷贝,会导致两个对象中的成员变量指向同一块空间,在析构时会导致同一块空间释放内存多次,引发错误。

    赋值运算符重载

    运算符重载

    在谈及赋值运算符重载前,必须先来讲一讲运算符重载。

    我们知道,对于int类型,是可以进行加减乘除等运算的。但对于自定义类型,能否实现加减乘除运算呢?这就需要运用到运算符重载了。

    运算符重载是具有特殊函数名的函数。函数名字为:operator操作符(参数列表)

    注意:一些运算符不支持重载,即:.*、::、sizeof、?:、.

    以Date类==运算符重载为例,需要将函数作为成员函数,以便于访问成员变量:

    class Date{public:Date(int year = 0, int month = 1, int day = 1);bool operator==(Date& date)const;private:int _year;int _month;int _day;};bool Date::operator==(Date& date)const{return _year == date._year&& _month == date._month&& _day == date._day;}

    赋值运算符重载

    赋值运算符重载顾名思义,是对赋值运算符进行的重载,用于两个已经存在的对象进行赋值拷贝。

    赋值运算符重载有四个要点:

    (1)参数类型

    (2)返回值

    (3)检测是否自己给自己赋值

    (4)返回*this,用于连续赋值

    一个类如果没有显式定义赋值运算符重载,编译器会自己生成一个,对于内置成员,完成按字节序拷贝;对于自定义成员变量,会调用它的赋值运算符重载。

    取地址及const取地址操作符重载

    这两个运算符一般不需要重新定义,使用编译器生成的重载即可,只有特殊情况才需要重载,如不希望自己特定的内容被别人访问时。

    读到这里,这篇“C++类的默认成员函数有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网其他教程频道。

    --结束END--

    本文标题: C++类的默认成员函数有哪些

    本文链接: https://www.lsjlt.com/news/322835.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • C++类的默认成员函数有哪些
      本文小编为大家详细介绍“C++类的默认成员函数有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++类的默认成员函数有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。类的默认成员函数每个类中,如果不主动实...
      99+
      2023-06-29
    • 【C++类和对象】类有哪些默认成员函数呢?(下)
      文章目录 一、类的6个默认成员函数二、日期类的实现2.1 运算符重载部分2.2 日期之间的运算2.3 整体代码1.Date.h部分2. Date.cpp部分 三. const成员函数...
      99+
      2023-09-06
      c++ 开发语言
    • C++中类的默认成员函数详解
      目录一、构造函数二、析构函数三、拷贝构造函数四、赋值函数(赋值运算符重载)总结C++中,对于任意一个类,都会为我们提供4个默认的成员函数(如果我们不显示的去声明)—&md...
      99+
      2024-04-02
    • C++中类的默认成员函数怎么用
      这篇文章主要介绍了C++中类的默认成员函数怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C++中,对于任意一个类,都会为我们提供4个默认的成员函数(如果我们不显示的去声...
      99+
      2023-06-29
    • 详解C++中类的六大默认成员函数
      目录一、类的默认成员函数二、构造函数Date(形参列表)1、构造函数的函数名和返回值2、构造函数的调用3、构造函数的重载4、系统生成的默认构造函数5、系统生成的默认构造函数的作用6、...
      99+
      2022-11-13
      C++类默认成员函数 C++类六大默认成员函数 C++类成员函数
    • C++类中的六大默认成员函数详解
      在C++中,当你去创建一个类的时候,即便这个类是空类,也会自动生成下面6个默认成员函数,在本篇博客中,我将逐一分析下面6个默认成员函数。 构造函数 构造函数并不是去构造函数的函数,...
      99+
      2024-04-02
    • C++类中六个默认的成员函数详解
      目录浅谈构造函数析构函数拷贝构造函数赋值重载函数const成员函数取地址及const取地址重载函数深挖 构造函数拷贝构造函数赋值运算符重载函数总结浅谈 先来说一下“this...
      99+
      2024-04-02
    • C++类中隐藏的默认函数有哪些
      这篇文章主要介绍了C++类中隐藏的默认函数有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Test类中隐藏的六个默认的函数class Test{public:/...
      99+
      2023-06-29
    • C++函数的默认参数有哪些
      本篇内容介绍了“C++函数的默认参数有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C++当中的支持默认参数,如果你学过Python,那...
      99+
      2023-06-25
    • c++中类成员默认是什么类型
      未指定访问权限时,c++ 中类的成员默认访问权限为私有,只能由该类的成员函数访问。原因在于私有成员有助于封装数据,防止意外访问或修改敏感信息。例外包括友元声明和继承,其中友元和派生类可以...
      99+
      2024-05-09
      c++
    • C++类的静态成员有哪些
      本篇内容介绍了“C++类的静态成员有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在静态成员函数的实现中不能直接引用类中说明的非静态成员...
      99+
      2023-06-17
    • C++ 友元函数能访问哪些类型成员?
      在 c++++ 中,友元函数可以访问类的所有公共、受保护和私有成员,但私有成员的访问受限,只能在类的成员函数调用时进行。 C++ 友元函数可以访问哪些类型成员? 什么是友元函数? 友元...
      99+
      2024-04-15
      类成员 友元函数 c++
    • C++中成员函数和友元函数的区别有哪些
      C++中成员函数和友元函数之间有以下几点区别:1. 访问权限:成员函数可以直接访问类的私有成员和保护成员,而友元函数可以在类的外部访...
      99+
      2023-08-16
      C++
    • C++中成员函数和友元函数有哪些区别
      小编给大家分享一下C++中成员函数和友元函数有哪些区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为什么使用成员函数和友元函数这个问题至关重要,直接影响着后面的...
      99+
      2023-06-29
    • C++中的类成员函数当线程函数
      目录类成员函数当线程函数解决方法一解决方法二解决方法三类成员函数作为多线程的入口类成员函数当线程函数 C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该...
      99+
      2022-11-13
      C++类成员函数 C++线程函数 C++成员函数
    • Python 函数默认返回None原因有哪些
      小编给大家分享一下Python 函数默认返回None原因有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Python 有一项默认的做法,很多编程语言都没有,所...
      99+
      2023-06-16
    • C++函数的默认参数详情
      文章转自微信 公众号:Coder梁(ID:Coder_LT) C++当中的支持默认参数,如果你学过Python,那么想必对此不会陌生。C++中的默认参数的用法和Python基本一致...
      99+
      2024-04-02
    • C++类的静态成员变量与静态成员函数详解
      目录1、类的静态成员变量2、静态成员函数总结1、类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成...
      99+
      2024-04-02
    • C++类包含函数有哪些
      这篇文章主要讲解了“C++类包含函数有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++类包含函数有哪些”吧!C++类包含三个我们关心的函数:构造函数,析构函数,和所有重要的 DoSo...
      99+
      2023-06-17
    • java中有哪些有哪些类成员的访问级别
      java中有哪些有哪些类成员的访问级别?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Andro...
      99+
      2023-06-14
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作