当前位置: 首页 > 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.lryc.cn/news/465466.html

相关文章:

  • 架构师备考-背诵精华(系统架构评估)
  • QT 实现自定义水波进度条
  • 厨房老鼠数据集:掀起餐饮卫生监测的科技浪潮
  • Linux系统:more命令
  • ESP32-S3学习笔记:分区表(Partition Table)的二进制分析
  • 04,perl
  • Js 更加优雅地实现Form表单重置
  • 基于微信小程序的驾校预约系统设计与实现
  • 利用python进行数据处理,得到对自己有利的内容
  • Java面试题五
  • 2013 lost connection to MySQL server during query
  • 【英特尔IA-32架构软件开发者开发手册第3卷:系统编程指南】2001年版翻译,2-1
  • Android便携式WLAN热点分析
  • 从经济学原理看团队分工合作
  • 企业一级流程架构规划方法
  • 用ESP32驱动stt7735 TFT屏幕
  • Yolo目标检测:Yolo v1简介
  • Java動態轉發代理IP詳解
  • Android15之解决gdb:Remote register badly formatted问题(二百三十六)
  • 【Router】路由器中NAT、NAPT、NPT是什么?
  • 代码随想录算法训练营第三十九天|背包问题,416. 分割等和子集
  • 可调用对象和Lambda
  • 华为认证HCIE存储考啥?未来发展方向在哪?一个月就能轻松拿下?
  • 如何让自己的网站,被更多的人搜索到(免费方案)
  • Modbus 协议:工业自动化领域的通信脊梁
  • 函数的力量:掌握C语言的基石
  • U-Boot的移植流程
  • xRDP – 在 Ubuntu 18.04、20.04、22.04、22.10、23.04(脚本版本 1.4.7)上轻松安装 xRDP
  • [Linux网络编程]04-多进程/多线程并发服务器思路分析及实现(进程,信号,socket,线程...)
  • 《OpenCV计算机视觉》—— 年龄与性别预测