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

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

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

相关推荐
智学AI1 小时前
AI博主写作素材管理方法分享:资料归集、笔记关联与文档归档
人工智能·笔记
叼烟扛炮1 小时前
[LangChain] 学习笔记(02):LCEL 链式调用与动态模型配置实战
服务器·开发语言·网络·笔记·学习·langchain
weixin_448119941 小时前
Datawhale Jev Cookbook 202610 笔记5
笔记
一木 之林2 小时前
Dify学习笔记 04 · 检索底座:Embedding、Rerank与向量数据库(第46-54集)
笔记·学习·embedding·dify
ljt27249606612 小时前
Python笔记(十一)--Numpy(一)
笔记·python·numpy
芯思路2 小时前
STM32开发学习笔记之十【AI部署】
笔记·stm32·学习
江屿风3 小时前
【Plain Language Large Model】【从浏览器到全栈:一课精通Node.js三剑客】流食般投喂
笔记·前端框架·npm·node.js·js·npx
一只大鸽子3 小时前
游戏开发笔记0-Godot启动
笔记·游戏引擎·godot
Nuanyt4 小时前
LeetCode Hot 100 链表专题2 3 题 (Java)
java·笔记·算法·leetcode·链表
asaotomo4 小时前
截图识题、AI 讲解、笔记沉淀:Chrome 扩展体验
前端·chrome·笔记