当前位置: 首页 > news >正文

C++详细笔记(四)

1.类和对象

1.1拷贝构造函数(补充)

class Date{
public:int _year;int _month;int _day;
// 全缺省的构造函数Date(int year = 1900, int month = 1, int day = 1){_year = year;_month = month;_day = day;}
}
int main()
{Date d1(2024, 4, 14);Date d2(d1);Date d3 = d1;                 //拷贝构造Date d4(2024, 4, 15);         //赋值d1 = d4;return 0;
}

1.2运算符重载

运算符重载是 C++ 中的一项强大功能,它允许程序员重新定义已有的运算符,使其能够用于特定的类类型或自定义数据类型。

  1. 增强代码可读性

    • 通过运算符重载,可以使用熟悉的运算符来操作自定义类型的对象,使代码更加直观和易于理解。例如,对于一个表示复数的类,可以重载加法运算符+,使得两个复数的相加操作看起来就像对基本数据类型进行加法一样自然。
    • 对于自定义的容器类,可以重载下标运算符[],使得访问容器中的元素更加方便。
  2. 提高代码的可维护性

    • 当需要对自定义类型进行特定的操作时,使用运算符重载可以将这些操作封装在类的内部,而不是在类的外部使用一系列的函数调用。这样可以提高代码的封装性和可维护性。
    • 如果后续需要修改这些操作的实现,只需要在类的内部修改运算符重载函数即可,而不需要在整个代码中查找和修改相关的函数调用。
  3. 具有特殊函数名的函数。语法结构为:返回值类型 operator操作符()
  4. 不可以创造新的操作符。
  5. 必须要有一个类类型参数。
  6. 内置类型运算符,其含义不能改变。(编译器中不会将此报错,但是把加法硬要重载成减法怎么看也有点离谱)。
  7. .*  ::  sizeof  ?: . 五个操作符不能重载,其中.*运算符是帮助我们调用成员指针的。
/ 赋值运算符重载// d2 = d3 -> d2.operator=(&d2, d3)Date & operator=(const Date& d){
Date a;
this->_year = d._year;
this->_month = d._month;
this-> _day = d._day;
return *this;}
类外对输入输出流的重载
ostream& operator<<(ostream& output, Date& a)
{cout << a._year << "年" << a._month << "月" << a._day << "天" << endl;return output;
}
 ==运算符重载bool operator==(const Date& d)
{if (this->_year == d._year){if (this->_month == d._month){if (this->_day == d._day){return true;}else{return false;}}else{return false;}}else{return false;}
}//日期类举例

赋值运算符重载成全局函数,无this指针,需要两个参数。

函数指针与运算符重载各不相同,多个同一运算符重载可以构成函数重载。

一般成员函数重载为成员函数,输入流输出流最好重载为全局函数。


http://www.mrgr.cn/news/55707.html

相关文章:

  • 【D3.js in Action 3 精译_037】4.1 DIY 实战:D3 源码分析之——d3.timeFormat() 函数
  • 学习eNSP对提升就业竞争力有多大帮助?
  • smbms(2)
  • 雷池WAF自动化实现安全运营实操案例终极篇
  • 在使用new Date()生成时间戳时,发现数据库中 的时间总是多出一秒钟。
  • 分布式数据库环境(HBase分布式数据库)的搭建与配置
  • c++算法第4天
  • django5入门【03】新建一个hello界面
  • 速盾高防 CDN 防御效果如何?
  • 深入理解 Kafka
  • 基于微信小程序二手物品调剂系统设计与实现
  • Qt开发——Qt项目打包、整合以及生成安装包保姆级教程(Windows系统)
  • WSL2安装ros,安装anaconda,配置PX4
  • 传智杯 第六届—第二场—D
  • 【前端】如何制作一个自己的网页(13)
  • Redis 集群
  • 01,hana
  • 开源EMO再升级!复旦|百度|南大推出Hallo2,可以生成4K,一小时的音频驱动的视频。
  • AGV电子地图之贝塞尔曲线
  • 每日OJ题_牛客_[NOIP2001]装箱问题_01背包_C++_Java
  • 面试总结(持续更新~)
  • 100多种【基于YOLOv8/v10/v11的目标检测系统】目录(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型)
  • pychar社区版下载
  • Leetcode|24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II
  • 01 一篇读懂25机械考研复试超全流程讲解|考研面试经验和面试真题快来背诵!
  • 内网穿透frp部署