C++详细笔记(四)

1.类和对象

1.1拷贝构造函数(补充)

cpp 复制代码
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 ?: . 五个操作符不能重载,其中.*运算符是帮助我们调用成员指针的。

cpp 复制代码
/ 赋值运算符重载

// 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;
	}
cpp 复制代码
类外对输入输出流的重载
ostream& operator<<(ostream& output, Date& a)
{
	cout << a._year << "年" << a._month << "月" << a._day << "天" << endl;
	return output;
}
cpp 复制代码
 ==运算符重载

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指针,需要两个参数。

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

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

相关推荐
love530love2 小时前
【保姆级教程】Windows + Podman 从零部署 Duix-Avatar 数字人项目
人工智能·windows·笔记·python·数字人·podman·duix-avatar
草莓熊Lotso3 小时前
《算法闯关指南:动态规划算法--斐波拉契数列模型》--01.第N个泰波拉契数,02.三步问题
开发语言·c++·经验分享·笔记·其他·算法·动态规划
FFF团团员90910 小时前
树莓派学习笔记3:LED和Button
笔记·学习
碧海潮生_CC10 小时前
【CUDA笔记】04 CUDA 归约, 原子操作,Warp 交换
笔记·cuda
摇滚侠11 小时前
2025最新 SpringCloud 教程,从单体到集群架构,笔记02
笔记·spring cloud·架构
风123456789~11 小时前
【OceanBase专栏】OB背景知识
数据库·笔记·oceanbase
智者知已应修善业13 小时前
【51单片机普通延时奇偶灯切换】2023-4-4
c语言·经验分享·笔记·嵌入式硬件·51单片机
wdfk_prog13 小时前
[Linux]学习笔记系列 -- [block]bio
linux·笔记·学习
卡提西亚16 小时前
C++笔记-34-map/multimap容器
开发语言·c++·笔记
一个平凡而乐于分享的小比特18 小时前
UCOSIII笔记(十三)CPU利用率及栈检测统计与同时等待多个内核对象
笔记·ucosiii