c++ 学习 之 构造函数的分类和调用类型 深入学习

正文

构造函数是在C++中用于创建和初始化对象的特殊函数。构造函数可以根据不同的特性和参数进行分类,以下是一些常见的构造函数分类和详细讲解它们的调用方式:

默认构造函数:

默认构造函数是一个特殊的构造函数,它没有参数,也可以没有具体的实现代码。如果没有显式定义构造函数,C++编译器会为类生成一个默认构造函数。
当对象被创建时,如果没有提供任何构造函数的参数,编译器会自动调用默认构造函数来初始化对象。
示例:

class MyClass {
public:// 默认构造函数(由编译器生成)
};MyClass obj; // 调用默认构造函数

参数化构造函数:

参数化构造函数接受一个或多个参数,用于初始化对象的成员变量。
程序员必须自己定义参数化构造函数,编译器不会自动生成。
示例:

class MyClass {
public:// 参数化构造函数MyClass(int value) : someValue(value) {}
private:int someValue;
};MyClass obj(42); // 调用参数化构造函数

拷贝构造函数:

拷贝构造函数是用于创建一个对象的副本的特殊构造函数。
拷贝构造函数通常接受一个同类型的对象作为参数,以便复制其状态。
当对象按值传递、返回值传递或通过赋值操作进行复制时,拷贝构造函数会被调用。
示例:

class MyClass {
public:// 拷贝构造函数MyClass(const MyClass& other) : someValue(other.someValue) {}
private:int someValue;
};MyClass obj1;
MyClass obj2 = obj1; // 调用拷贝构造函数

委托构造函数(C++11及更高版本):

委托构造函数允许一个构造函数调用同一类的另一个构造函数,以避免代码重复。
委托构造函数通过在成员初始化列表中使用其他构造函数的形式来调用。
示例:

class MyClass {
public:// 委托构造函数MyClass(int value) : someValue(value) {}MyClass() : MyClass(0) {} // 委托构造函数
private:int someValue;
};

隐式调用:

构造函数可以在不直接调用的情况下自动调用,例如通过对象的声明和初始化、通过赋值操作、作为函数参数传递等方式。
示例:

MyClass obj1;            // 调用默认构造函数
MyClass obj2 = obj1;     // 调用拷贝构造函数
MyClass obj3(obj1);      // 调用拷贝构造函数

这些不同类型的构造函数允许程序员在创建对象时执行不同的初始化操作,根据需要选择合适的构造函数。随着C++标准的不断发展,构造函数的功能和用法也在不断演进,使得对象的创建和初始化变得更加灵活和强大。

注意

  • 无参构造函数 调用的时候别加() 不然编译器认为 是一个函数声明
  • 匿名对象由于没有被使用的话会被回收
  • 不要利用 拷贝构造函数 初始化匿名对象,就是说 如果 person ( p3 ) 等价于 person p3; 类似于重定义了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/63857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day-36 代码随想录算法训练营(19)part05

435.无重叠区间 思路:首先对数组排序,只需要关注重叠区间就行,有重叠时计数1,然后更新当前右边界为重叠区间中的最小右边界。 763.划分字母区间 思路:记录每一个字母的最远位置,然后从头开始遍历&#xf…

Java如何发起http的get请求的实现

加哥最近做第三方接口开发,对方提供的是get方式的http请求,下面加哥给大家进行了总结如何用java代码去发送http请求并获取结果。 下面是发送get请求的工具类 1.不要求携带token的方式 public static String getUrl(String tempurl,String bm) {String…

ARM DIY(四)WiFi 调试

文章目录 焊接打开内核编译选项重新编译内核烧录 && 运行 && 测试完善脚本测速手搓天线正式天线 焊接 换个粗点的风枪嘴,让热风覆盖 RTL8823BS 整体模块,最终实现自动归位 焊接 SDIO 接口的上拉电阻以及复位引脚上拉电阻 硬件部分就这…

【C++】map和set

map和set 文章目录 map和set关联式容器setset介绍set的函数测试代码 multiset注意事项测试代码 mapmap介绍map的函数测试代码 关联式容器 前面了解过的vector,list,string等容器都是序列式容器,存储的都是元素本身,底层都是线性的…

七、Kafka-Kraft 模式

目录 7.1 Kafka-Kraft 架构7.2 Kafka-Kraft 集群部署 7.1 Kafka-Kraft 架构 左图为 Kafka 现有架构,元数据在 zookeeper 中,运行时动态选举 controller,由controller 进行 Kafka 集群管理 右图为 kraft 模式架构(实验性&#xff…

001图机器学习与图神经网络简介

文章目录 一. 无处不在的图二. 如何对图数据做信息挖掘三. 图神经网络四. 图机器学习常用的编程工具五. 图的可视化工具六. 常见的图数据库七. 图机器学习的应用举例八. 结束语 一. 无处不在的图 一切具有关联关系的数据都可以用图来表示。比如:交通网、知识图谱、…

Vim如何清空文件

在Vim中,可以使用以下命令清空文件内容: 打开需要清空的文件:在终端中输入vim filename打开文件,其中filename是你要编辑的文件名。 进入命令模式:按下键盘上的Esc键,确保处于Vim的命令模式。(…

C# excel与DataTable之间的转换

注意&#xff0c;Excel读入DataTable需要使用NPOI包 /// <summary>/// Excel导入成Datable/// </summary>/// <param name"file">导入路径(包含文件名与扩展名)</param>/// <returns></returns>public static DataTable ExcelT…

pdf加密如何解除?这样解除加密很简单

pdf加密如何解除&#xff1f;有时&#xff0c;我们可能会收到一些加密的PDF文件&#xff0c;它们不允许我们对其进行编辑或打印。这时&#xff0c;我们需要使用PDF解密工具&#xff0c;以便能够轻松地解除PDF加密并对其进行编辑。那么接下来就给大家介绍一下pdf加密解除的方法。…

Compose - 自定义作用域限制函数

一、概念 在 Compose 中对于作用域的应用特别多。比如 weight 修饰符只能用在 RowScope 或者 ColumnScope 作用域中&#xff0c;item 组件只能用在 LazyListScope 作用域中。 标准库中的作用域函数如 apply()、let() 会以不同方式持有和返回上下文对象&#xff0c;调用它们时 L…

RISC-V Linux系统rootfs制作

文章目录 1、下载2、配置与编译3、运行 buildroot 是一个构建嵌入式Linux系统的框架。整个 buildroot 是由Makefile(*.mk) 脚本和 Kconfig(Config.in) 配置文件构成的&#xff0c;因此可以像配置 Linux 内核一样执行 make menuconfig 进行配置&#xff0c;编译出一个完整的、可…

SPI3+DMA外设驱动-TFTLCD初始化

前言 &#xff08;1&#xff09;本系列是基于STM32的项目笔记&#xff0c;内容涵盖了STM32各种外设的使用&#xff0c;由浅入深。 &#xff08;2&#xff09;小编使用的单片机是STM32F105RCT6&#xff0c;项目笔记基于小编的实际项目&#xff0c;但是博客中的内容适用于各种单片…

内网隧道代理技术(二十)之 CS使用HTTP代理上线不出网机器

CS使用HTTP代理上线不出网机器 CS工具自带上线不出网机器 如图A区域存在一台中转机器,这台机器可以出网,这种是最常见的情况。我们在渗透测试的过程中经常是拿下一台边缘机器,其有多块网卡,边缘机器可以访问内网机器,内网机器都不出网。这种情况下拿这个边缘机器做中转,…

VsCode搭建Java开发环境 vscode搭建java开发环境 vscode springboot 搭建springboot

VsCode搭建Java开发环境 vscode搭建java开发环境 vscode springboot 搭建springboot VsCode java开发截图1、安装Java 环境相关插件2、安装 Spring 插件3、安装 Mybatis 插件第一个 vsc-mybatis第二个 mybatisX 4、安装Maven环境4.1、安装Maven环境4.2、VsCode配置Maven环境 5、…

vite vue项目打包后双击index.html(file://...)无法正常浏览解决

写一个Webview本地加html的项目&#xff0c;html用vite vue3写&#xff0c;打包后http访问没有问题&#xff0c;放在APP内file访问白屏报错&#xff0c;查了2天无解。最终看到Vue3 Vite项目打包静态文件之后无法以file协议访问找到思路。在此文启发下做了些改善记录。 一、文件…

视频汇聚/视频监控管理平台EasyCVR接入海康SDK协议后无法播放该如何解决?

开源EasyDarwin视频监控/安防监控/视频汇聚EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#…

Rust的模块化

Rust的模块化要从Rust的入口文件谈起。 Rust的程序的入口文件有两个 如果程序类型是可执行应用&#xff0c;入口文件是main.rs&#xff1b;如果程序类型是库&#xff0c;入口文件是lib.rs&#xff1b; 入口文件中&#xff0c;必须声明本地模块&#xff0c;否则编译器在编译过…

10. 网络模型使用及修改

10.1 下载网络模型 import torchvision#trauin_data torchvision.datasets.ImageNet("./dataset",split"train",downloadTrue,transformtorchvision.transforms.ToTensor()) # 这个数据集没有办法再公开的访问了 vgg16_true torchvision.models.v…

LeetCode-2511-最多可以摧毁的敌人城堡数目

题目链接 代码实现&#xff1a; class Solution {/** 找 1 -> -1 的时候&#xff0c;经过0的最大个数* 解题思路&#xff1a;双指针*/public int captureForts(int[] forts) {int len forts.length;if(len1){return 0;}int max Integer.MIN_VALUE;boolean flag false;boo…

kafka---- zookeeper集群搭建

1.准备工作: ##准备3个节点&#xff0c;要求配置好主机名称&#xff0c;服务器之间系统时间保持一致 ##注意/etc/hostname 和/etc/hosts 配置主机名称(在这个里我准备Prac-zk-133, Prac-zk-134 , Prac-zk-135二节点) vim /etc/hosts #保证可以通过主机名互通 添加格式为IP 主…