默认构造函数、参数化构造函数、拷贝构造函数、析构函数

news/2024/10/6 3:31:37/文章来源:https://www.cnblogs.com/mxh010211/p/18271328

在C++编程语言中,构造函数和析构函数是用于管理对象生命周期的重要函数。以下是关于默认构造函数、参数化构造函数、拷贝构造函数和析构函数的详细解释及代码示例。

默认构造函数

默认构造函数是在没有参数的情况下创建对象时调用的构造函数。如果用户没有定义任何构造函数,编译器会提供一个隐式默认构造函数。用户也可以显式定义默认构造函数。

示例代码:

#include <iostream>class MyClass {
public:// 默认构造函数MyClass() {std::cout << "Default constructor called." << std::endl;}
};int main() {MyClass obj; // 调用默认构造函数return 0;
}

3参数化构造函数

参数化构造函数是带有参数的构造函数,用于在创建对象时进行初始化。

示例代码:

#include <iostream>class MyClass {
private:int value;
public:// 参数化构造函数MyClass(int v) : value(v) {std::cout << "Parameterized constructor called with value: " << value << std::endl;}
};int main() {MyClass obj(42); // 调用参数化构造函数return 0;
}

拷贝构造函数

拷贝构造函数用于通过另一个同类型的对象来初始化新对象。其形式通常为 ClassName(const ClassName &other)。如果不显式定义,编译器会生成一个默认的拷贝构造函数。

示例代码:

#include <iostream>class MyClass {
private:int value;
public:// 参数化构造函数MyClass(int v) : value(v) {std::cout << "Parameterized constructor called with value: " << value << std::endl;}// 拷贝构造函数MyClass(const MyClass &other) : value(other.value) {std::cout << "Copy constructor called with value: " << value << std::endl;}
};int main() {MyClass obj1(42);       // 调用参数化构造函数MyClass obj2 = obj1;    // 调用拷贝构造函数return 0;
}

3析构函数

析构函数用于在对象生命周期结束时执行清理操作。析构函数没有参数,也没有返回值,其名称为类名前加 ~ 号。编译器会自动调用析构函数。

示例代码:

#include <iostream>class MyClass {
public:// 默认构造函数MyClass() {std::cout << "Default constructor called." << std::endl;}// 析构函数~MyClass() {std::cout << "Destructor called." << std::endl;}
};int main() {MyClass obj; // 调用默认构造函数return 0;    // 在此处对象 `obj` 被销毁,调用析构函数
}

结合示例
一个类中包含所有这些构造函数和析构函数的完整示例:

#include <iostream>class MyClass {
private:int value;
public:// 默认构造函数MyClass() : value(0) {std::cout << "Default constructor called." << std::endl;}// 参数化构造函数MyClass(int v) : value(v) {std::cout << "Parameterized constructor called with value: " << value << std::endl;}// 拷贝构造函数MyClass(const MyClass &other) : value(other.value) {std::cout << "Copy constructor called with value: " << value << std::endl;}// 析构函数~MyClass() {std::cout << "Destructor called." << std::endl;}
};int main() {MyClass obj1;           // 调用默认构造函数MyClass obj2(42);       // 调用参数化构造函数MyClass obj3 = obj2;    // 调用拷贝构造函数return 0;               // 程序结束时依次调用析构函数
}

在上述代码中,演示了如何定义和使用默认构造函数、参数化构造函数、拷贝构造函数和析构函数。每个构造函数和析构函数在创建和销毁对象时都会被调用,打印相应的消息以示区别。

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

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

相关文章

SpringBoot3 整合 Logback

SpringBoot3 整合 Logback 日志框架1. 默认框架实现 SpringBoot3 默认是使用 SLF4J + Logback 作为默认的日志门面和实现,但也支持其他日志系统,如 Log4j2、JUL (Java Util Logging), 这是通过所谓的日志门面实现的,开发者可以根据自己的需求选择合适的日志实现框架进行配置…

[LeetCode] 238. Product of Array Except Self

坑真的很多,首先要处理全零reduce没有值typeerror的问题。 class Solution:def productExceptSelf(self, nums: List[int]) -> List[int]:total=reduce(mul, nums)ret =[]if total == 0:try:total = reduce(mul, [x for x in nums if x != 0]) except TypeError:#default v…

灰色预测代码的讲解

本章通过一个例题,来讲解灰色预测代码。由于笔者只是以学习者的身份,以做笔记为目的写这篇博客,因此欢迎大家学习交流,代码(非本人所写)会附在最后面 目录一、总述————如何处理预测题目?1.画出时序图,分析趋势2.检验与比较模型————训练与试验3.得出结论————…

CRT工具

CRT工具 传输位置设置打开SFTP alt + p 命令 ls:远程机器当前目录内容 lls:传输位置文件的目录内容 pwd:远程机器的当前位置 lpwd:传输位置的位置 get 文件:ftp传输文件 get -r 文件夹:ftp传输文件夹 put 文件:ftp传输文件 put -r 文件夹:ftp传输文件夹 lrm -rf 文件/文…

硬件开发笔记(二十三):贴片电阻的类别、封装介绍,AD21导入贴片电阻原理图封装库3D模型

前言电阻,电容,电感还有各种基础的电子元器件、连接器和IC构成了各种实现功能的电子电路。  本篇介绍贴片电阻,并将贴片电阻封装导入AD21,预览其三维模型。 贴片电阻贴片电阻(SMD Resistor)作为一种不可或缺的电子元件,广泛应用于各种电路和设备中。其体积小、重量轻、…

EtherCAT转Profinet网关配置说明第三讲:博图配置

XD-ECPNS20网关模块实现EtherCAT与Profinet协议转换设备,简化工业控制系统建设与维护。EtherCAT协议转Profinet协议网关模块是实现EtherCAT协议和Profinet协议之间无缝通讯的重要设备。使EtherCAT协议和Profinet协议能够相互转换,进行工控自动化里的互连和传送数据。EtherCAT…

第一周学习报告

在第一周,对Java进行初步了解,学习了Java的一些基础知识。学习主要参考于B站上的黑马程序员,以下为这周的学习报告 day1 打开CMD 1.win+r 2.输入CMD常见的CMD命令 1.盘符名称+冒号 盘符切换 2.dir 查看当前路径下的内容 3.cd目录 进入单级目录 4.cd .. 回退到上一级目录 5.c…

Linux 提权-SUID/SGID_2

本文通过 Google 翻译 SUID | SGID Part-2 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 上文回顾 2 枚举自定义 SUID 二进制文件 3 利用 SUID 二进制文件 – 共享对象注入3.1 使用 Strings …

配置与管理squid代理服务器

应用背景如下图所示, 公司用squid作代理服务器,代理服务器内网IP地址为192.168.200.1,外网IP为192.168.200.3公司内网所用IP地址段为192.168.200.0/24,并且想用8080作为代理端口。1: 配置非透明代理 1.1 、配置主机网络 准备三台Linux主机,第一台为外网主机名为www,网卡…

RedHat7.4—配置常规网络

配置主机名 把主机名修改为hyborn 方法一、使用nmtui修改主机名 需要管理员权限运行su -root输入root密码后进入管理员模式 运行nmtui通过上下左右选择菜单栏回车选择,进入设置系统名即可设置确定后退出 运行hostnamectl status 命令查看主机名,查看到的主机名,即可以看到St…

RedHat7.4—配置远程管理Linux服务器

公司的Linux服务器需24小时不间断工作,维护工程师希望通过设置能远程管理和维护服务器。要求通过SSH及VNC远程管理,实现如下配置需求:可以通过SSH服务访问远程主机,可以使用证书登录远程主机,不需要输入远程主机的用户名和密码 可以使用VNC服务访问远程主机,使用图形界面…

Ping 不通 虚拟机

Ping 不通虚拟机 更换位置后,IP不会动态变化,切换网络配置信息来解决