C++中的三大函数和操作符重载(Boolan)

发布时间 - 2026-01-10 23:04:06    点击率:

C++中三大函数:

  • 析构函数
  • 复制构造函数
  • =操作符(copy assignment operator)

这三个特殊的成员函数如果程序员没有实现,编译器将提供默认的实现方式。

析构函数:

形如~foo_t(),函数名和构造函数相同,前面加~,如果对象是自由变量创建,析构函数将在脱离作用域时调用。如果对象是通过new操作符创建的,则通过delete操作符调用析构函数。

复制构造函数:

形如foo_t(const foo_t& foo),以下情况复制构造函数均会被调用:

  1. 当对象按值返回时候(returned by value)
  2. 调用按值传参的函数(passed by value)
  3. 通过thrown抛出或caught捕获的对象
  4. 对象处于()包围的初始化列表中

=操作符:

重载=操作符,如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系统配置与自定义日志通道  如何在万网利用已有域名快速建站?