首页 > 其他分享 >类内默认生成的函数

类内默认生成的函数

时间:2024-08-27 11:52:37浏览次数:11  
标签:函数 默认 运算符 编译器 类内 拷贝 类中 构造函数

一、构造函数的调用规则

  1. 构造函数的调用时机

    • 当创建类的对象时,构造函数会被自动调用。

      • 使用new分配对象内存时
      • 直接在栈上或全局/静态存储区创建对象。
  2. 构造函数的特点

    • 构造函数的名字必须与类名完全相同。
    • 构造函数没有返回类型,连void也不写。
    • 构造函数可以有参数,也可以重载。
    • 如果类中没有显式定义任何构造函数,编译器会提供一个默认的构造函数。

二、默认生成的函数

如果类内没有显式定义任何成员函数(包括构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符),编译器会根据需要默认生成以下函数(称为特殊成员函数):

  1. 默认构造函数

    • 如果类中没有定义任何构造函数,编译器会提供一个默认的无参构造函数。
    • 如果类中定义了其他构造函数(无论是带参还是无参),编译器就不会再提供默认构造函数。
  2. 析构函数

    • 析构函数用于在对象生命周期结束时进行清理工作(如释放资源)。
    • 如果类中没有定义析构函数,编译器会提供一个默认的析构函数。
  3. 拷贝构造函数

    • 用于创建一个对象的副本。
    • 如果类中没有定义拷贝构造函数,编译器会提供一个默认的拷贝构造函数,该构造函数会进行成员级的浅拷贝。
  4. 拷贝赋值运算符

    • 用于将一个对象的值赋给另一个同类型的对象。
    • 如果类中没有定义拷贝赋值运算符,编译器会提供一个默认的拷贝赋值运算符,该运算符也会进行成员级的浅拷贝。
  5. 移动构造函数(C++11及以后):

    • 用于从另一个即将被销毁的对象那里“窃取”资源。
    • 如果类中没有定义移动构造函数,且类的某个成员类型定义了移动构造函数,编译器可能会生成一个移动构造函数。但如果没有移动构造函数的需求,编译器不会默认生成。
  6. 移动赋值运算符(C++11及以后):

    • 类似于移动构造函数,但用于赋值操作。
    • 同样的,如果类中没有定义移动赋值运算符,且类的某个成员类型定义了移动赋值运算符,编译器可能会生成一个。但如果没有需求,编译器不会默认生成。

标签:函数,默认,运算符,编译器,类内,拷贝,类中,构造函数
From: https://www.cnblogs.com/baobaobashi/p/18382409

相关文章

  • C++学习 — 函数
    目录1.概述2.函数的定义3.函数的调用4.值传参5.函数的常见样式6.函数的声明7.函数的分文件编写8.函数默认参数 9.函数占位参数10.函数重载(1)函数重载概述(2)函数重载注意事项1.概述作用:将一段经常使用的代码封装起来,减少重复代码   一个较大的程序,一般......
  • 探索C语言中数组作为函数参数的奥秘
    在C语言的世界里,数组是一种基础且强大的数据结构,它允许我们存储相同类型的数据集合。然而,在处理函数和数组的关系时,尤其是在数组作为函数参数传递时,初学者往往会感到困惑。今天,我们就来深入探讨这一话题,通过具体的代码示例来揭开其神秘面纱。数组作为函数参数的两种形式在C语......
  • 【Go函数详解】二、参数传递、变长参数与多返回值
    文章目录一、传递参数1.按值传参2.引用传参2.1特殊情况2.1.1切片slice2.1.2字典map二、变长参数1.基本定义和传值1.1基本定义1.2传值1.2.1普通传值1.2.2传递切片2.任意类型的变长参数(泛型)三、多返回值1.命名返回值一、传递参数1.按值传参Go语......
  • 桌面窗体工具类库 - C#小函数类推荐
          此文记录的是检测桌面窗体的小函数。/***桌面窗体工具类库AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comDate:2024-01-1515:18:00说明:用......
  • 【C语言】详解函数
    文章目录前言一、函数的概念二、自定义函数1.函数的语法形式2.形参和实参3.return语句三、库函数1.标准库和头文件2.库函数的使用四、函数的声明和定义五、传值调用和传址调用六、嵌套调用和链式访问1.嵌套调用2.链式访问前言一、函数的概念二~三、自定义函......
  • 新手专科准大一学习c语言的第10天之strcpy、memset、自定义函数的学习与应用
    strcpystrcpy是C语言标准库中的一个字符串操作函数,用于将源字符串复制到目标字符串中。#include<stdio.h>#include<string.h>intmain(){chararr1[50];//确保目标数组足够大,能够容纳源字符串chararr2[]="helloworld";//源字符串......
  • Google Earth Engine(GEE)——GEE函数编写详解4000字(初学者看过来)
    简介代码编辑器提供了对地球引擎全部功能的访问;但是需要对编码和JavaScript的基础知识有基本的了解。在本练习中,您将继续学习JavaScript语法和一些新的EarthEngine空间数据概念。在本练习中,您将重点关注与EarthEngine中图像集合相关的基本概念和方法。这是让用户编......
  • Python——生成器、递归、内省、高阶和偏函数
    Python的生成器(Generators)是一种特殊的迭代器,它使用类似于函数的语法定义,但是使用yield语句一次返回一个值(可以多次返回),而不是使用return语句。生成器函数允许你声明一个像迭代器那样的对象,但是你可以使用更简洁的语法来创建它们。为什么要使用生成器?内存效率高:生成器按需产......
  • 生成函数
    生成函数普通生成函数(ordinarygeneratingfunction,OGF)定义序列\(a\)的普通生成函数为:\[F(x)=\sum_na_nx^n\]\(a\)既可以是有穷序列,也可以是无穷序列。例子:1、序列\(a=\langle1,2,3\rangle\)的OGF为\(1+2x+3x^2\);2、序列\(a=\langle1,1,1,\cdots\rang......
  • 什么是友元?什么可以做友元?友元能干什么?(全局函数做友元,类做友元,成员函数做友元)c/c++
    一、什么是友元例如:你的生活中有一个特别好的朋友,你允许它进入你的房间(私有场所)也允许他进入客厅(相对公有场所),但是对于其他人你是不会允许他进入你的房间的,只允许他进入客厅。类对象也有这样类似的好朋友类,可以访问本类的私有成员,这个好朋友类就叫做这个类的友元,友元也可......