首页 > 其他分享 >learncpp-14 类

learncpp-14 类

时间:2024-07-22 22:31:50浏览次数:7  
标签:调用 14 形参 对象 构造 learncpp 拷贝 构造函数

14 类

14.9 构造器

  • 当类有私有成员时,无法使用聚合初始化
  • 构造器是一个特殊的成员函数,它在非聚合类的对象创建后自动调用
  • 构造器不会创建对象:编译器在调用构造器之前就为对象分配了内存,然后在未初始化的对象上调用构造函数
  • 构造器需要初始化对象的成员,因此不能为const
  • const对象不能调用非const的成员函数,但是可以调用构造器(构造器是默认会被调用的)

14.14 拷贝构造器

  • 拷贝构造函数使用已有对象来初始化一个相同类型的对象,这个新创建的对象是已有对象的副本
  • 如果类的定义中没有显式提供一个拷贝构造函数,那么C++会默认创建一个公共的拷贝构造函数
  • 访问控制是以类为单位,而不是以对象为单位,否则拷贝构造函数无法访问形参的私有成员以完成拷贝
  • 拷贝构造器不应该修改形参,所以拷贝构造器的形参应该为const左值引用
  • 当一个对象通过值传递给函数的形参时,会隐式调用拷贝构造函数进行拷贝;当函数按值返回一个对象给调用者时,也会隐式调用拷贝构造函数进行拷贝

这就是为什么拷贝构造器的形参必须是引用传递而不能是值传递
因为如果拷贝构造器的形参是值传递的话,那么每次值传递时都会隐式调用拷贝构造器自身,最后的结果就是无限递归地调用拷贝构造器

  • 调用拷贝构造器的主要场景
    • 对象作为函数的参数,以值传递的方式传给函数
    • 对象作为函数的返回值,以值的方式从函数返回
    • 使用一个对象给另一个对象初始化

标签:调用,14,形参,对象,构造,learncpp,拷贝,构造函数
From: https://www.cnblogs.com/akongogogo/p/18317122

相关文章

  • learncpp-12 复合类型:引用和指针
    12复合类型:引用和指针12.1复合数据类型介绍函数也是一种复合数据类型12.2左值和右值表达式除了可以产生值和副作用,还可以计算为对象或函数C++中的所有表达式都有两个属性:类型和值类别表达式的类型就是计算表达式得出的值、对象、函数的类型表达式的类型必须在编译时......
  • learncpp-20 函数
    20函数20.1函数指针函数和变量一样,也是在内存中被分配了一块地址。因此,函数指针就是一个保存函数的内存地址的变量函数也是有类型的,例如foo()这个函数的类型就是返回整数且不带参数intfoo(){return5;}<<操作符不知道如何输出函数指针(因为有无数种可能的函数指针),因......
  • learncpp-21 操作符重载
    21操作符重载21.12重载赋值运算符拷贝构造器和拷贝赋值运算符的作用几乎相同,都是将一个对象复制到另一个对象。但是拷贝构造器初始化新的对象,而赋值运算符替换已有对象的内容如果在拷贝前必须创建一个新对象,则使用拷贝构造器(包括按值传递和按值返回)如果在拷贝前无需创......
  • learncpp-1 C++基础
    1C++基础1.1语句和程序结构语句是一条让计算机执行某个动作的指令,是C++语言中最小的独立计算单元在高级语言(例如C++)中,一条语句可能编译成多条机器指令大多数语句以;结尾声明语句跳转表达式语句复合语句选择语句(条件语句)迭代语句(循环语句)try代码块函......
  • learncpp-2 函数和文件
    2函数和文件2.9命名冲突和命名空间两个(或多个)同名函数(或全局变量)被引入到属于同一程序的不同文件中,这将导致链接器错误。两个(或多个)同名函数(或全局变量)被引入到同一个文件中。这将导致编译器错误。不同的作用域(例如命名空间)中可以有相同的标识符只有声明和定义可以出现......
  • P3572 [POI2014] PTA-Little Bird
    原题链接题解首先,考虑接下来往哪颗树飞是很困难的,因为当前的决策会影响之后的决策但是如果考虑到达当前树从哪里飞过来就比较好了,因为无后效性接着我们可以暴力做法,遍历每棵树从前\(k\)个树飞过来的值,然后取最小的那个,但是这样显然会超时,所以我们优化一下有哪些值得被优化......
  • 踩坑记录:windows11下使用 VS2022 和 PCL1.14.1 配置点云开发环境
    闲话不多说,具体在windows下下载PCL与解压pcl可以看https://www.yuque.com/huangzhongqing/pcl/这位大佬的文章,那我就具体说一下踩过点坑:踩坑点1:按照大佬的文章的步骤进行解压与下载,我的PCL环境下在了K盘中,但是最后不知怎么的我的openni2文件夹下在了C盘里,也就是说3rdparty文件夹......
  • 昇思25天学习打卡营第14天|计算机视觉
    昇思25天学习打卡营第14天文章目录昇思25天学习打卡营第14天FCN图像语义分割语义分割模型简介网络特点数据处理数据预处理数据加载训练集可视化网络构建网络流程训练准备导入VGG-16部分预训练权重损失函数自定义评价指标Metrics模型训练模型评估模型推理总结引用......
  • 代码随想录算法训练营第十一天| 144. 二叉树的前序遍历 , 94. 二叉树的中序遍历, 145.二
    今天主要学习了二叉树的基本概念,以及多种遍历方法。包含分别使用迭代思想和递归思想的前序遍历,中序遍历,后序遍历以及层次遍历。二叉树的基础知识二叉树二叉树的种类可以分为满二叉树和完全二叉树。满二叉树指的是一个二叉树仅包含度为0和度为2的结点,并且度为0的节点在同一层......
  • 《影子战术:将军之刃》启动故障:vcruntime140.dll丢失或损坏解决方法
    遇到《影子战术:将军之刃》(ShadowTactics:BladesoftheShogun)游戏运行时报错“vcruntime140.dll文件丢失或损坏”的问题,意味着游戏所依赖的VisualC++运行时库组件缺失或损坏。以下是解决这一问题的具体方法:回收站恢复当电脑开机提示找不到vcruntime140.dll时,首先可以尝......