C++中的三大函数和操作符重载(Boolan)
发布时间 - 2026-01-10 23:04:06 点击率:次C++中三大函数:

- 析构函数
- 复制构造函数
- =操作符(copy assignment operator)
这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。
析构函数:
形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。
复制构造函数:
形如foo_t(const foo_t& foo),以下情况复制构造函数均会被调用:
- 当对象按值返回时候(returned by value)
- 调用按值传参的函数(passed by value)
- 通过thrown抛出或caught捕获的对象
- 对象处于()包围的初始化列表中
=操作符:
重载=操作符,如foo_t& operator=(const foo_t& foo),对已有对象的赋值操作将调用该函数(未初始化的对象成员将调用复制构造函数)。
以下为代码实例:
#include <cstring>
#include <iostream>
class foo_t {
friend std::ostream &operator<<(std::ostream &os, foo_t const &foo) {
os << foo.data;
return os;
}
public:
foo_t(void) : data(new char[14]) { std::strcpy(data, "Hello, World!"); }
~foo_t(void) { delete[] data; }
foo_t(const foo_t& other);
foo_t &operator=(const foo_t& other);
private:
char *data;
};
foo_t::foo_t(const foo_t& other) {
std::cout << "call copy constructor!!!" << std::endl;
this->data = new char[strlen(other.data) + 1];
strcpy(this->data, other.data);
}
foo_t& foo_t::operator=(const foo_t& other) {
std::cout << "call the copy assignment operator!!!" << std::endl;
if (this == &other)
return *this;
this->data = new char[strlen(other.data) + 1];
strcpy(this->data, other.data);
return *this;
}
int main() {
foo_t foo;
std::cout << foo << '\n';
foo_t t(foo);
// foo_t t2 = t;
foo_t t3;
t3 = t;
return 0;
}
为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# C++
# 函数
# 操作符
# C++的std::vector<bool>转储文件问题
# C#调用C++ DLL bool返回值始终为true的问题
# C++学习之cstdbool和cstddef头文件封装源码分析
# 利用C++实现从std::string类型到bool型的转换
# C++特有的bool变量使用
# 形如
# 将在
# 已有
# 三大
# 这三个
# 抛出
# 列表中
# 分别在
# 按值传参
# passed
# returned
# 均会被
# ol
# thrown
# strong
# pre
# ul
# li
# caught
# foo
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
重庆市网站制作公司,重庆招聘网站哪个好?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
如何构建满足综合性能需求的优质建站方案?
html如何与html链接_实现多个HTML页面互相链接【互相】
Python正则表达式进阶教程_复杂匹配与分组替换解析
英语简历制作免费网站推荐,如何将简历翻译成英文?
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
如何在新浪SAE免费搭建个人博客?
中山网站制作网页,中山新生登记系统登记流程?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
如何在Windows服务器上快速搭建网站?
如何在IIS7中新建站点?详细步骤解析
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
Laravel怎么判断请求类型_Laravel Request isMethod用法
开心动漫网站制作软件下载,十分开心动画为何停播?
Internet Explorer官网直接进入 IE浏览器在线体验版网址
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
大连 网站制作,大连天途有线官网?
Laravel如何使用Livewire构建动态组件?(入门代码)
浅述节点的创建及常见功能的实现
Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】
Python函数文档自动校验_规范解析【教程】
如何快速搭建高效WAP手机网站?
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
如何快速搭建个人网站并优化SEO?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何基于云服务器快速搭建个人网站?
Laravel如何创建自定义Artisan命令?(代码示例)
IOS倒计时设置UIButton标题title的抖动问题
Laravel怎么发送邮件_Laravel Mail类SMTP配置教程
Laravel如何配置.env文件管理环境变量_Laravel环境变量使用与安全管理
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
JavaScript如何实现音频处理_Web Audio API如何工作?
用yum安装MySQLdb模块的步骤方法
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】
Laravel集合Collection怎么用_Laravel集合常用函数详解
如何快速搭建高效香港服务器网站?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
网站制作免费,什么网站能看正片电影?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
如何在万网利用已有域名快速建站?
上一篇:laravel的意思是什么
上一篇:laravel的意思是什么

