• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++中的三大函数和操作符重载(Boolan)

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

作者:冻结的企鹅 字体:[增加 减小] 来源:互联网 时间:2017-05-28

冻结的企鹅 通过本文主要向大家介绍了c++操作符重载,操作符重载,重载赋值操作符,java 操作符重载,操作符可以重载为类的等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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;
}
</div>

为了方便测试,可以分别在析构函数、拷贝构造、=重载处设置断点,观察程序执行流程。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 基础编程之十进制转换为任意进制及操作符重载
  • C++中的三大函数和操作符重载(Boolan)
  • 基于C++中覆盖,重载,隐藏的一点重要说明
  • C++中的重载、覆盖、隐藏介绍
  • C++ new、delete(new[]、delete[])操作符重载需要注意的问题
  • c++重载的详细总结
  • C++中的操作符重载详细解析
  • C++输入输出操作符重载的深入分析

相关文章

  • 2017-05-28C++设计模式之解释器模式
  • 2017-05-28C语言实现顺序表基本操作汇总
  • 2017-05-28C++中将string类型转化为int类型
  • 2017-05-28c++ cin 作为while条件(详解)
  • 2017-05-28C++实现图形界面时钟表盘代码
  • 2017-05-28深入分析C++中声明与定义的区别
  • 2017-05-28C语言中的内存泄露 怎样避免与检测
  • 2017-05-28线程按指定顺序输出字符到数组的实例代码
  • 2017-05-28简单谈谈关于C++中大随机数的问题
  • 2017-05-28C语言中字符的输入输出以及计算字符个数的方法详解

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C语言函数指针(指向函数的指针)详解
    • 解析C++中的虚拟函数及其静态类型和动态类型
    • C语言变长数组 struct中char data[0]的用法详解
    • c语言实现顺序表的基本操作
    • C++在成员函数中使用STL的find_if函数实例
    • 解析wprintf 中使用%I64d格式化输出LONGLONG的详细介绍
    • c++传递函数指针和bind的示例
    • 大数据情况下桶排序算法的运用与C++代码实现示例
    • 深入c++中临时对象的析构时机的详解
    • C语言static修饰函数详细解析

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有