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

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

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

相关推荐
听麟34 分钟前
HarmonyOS 6.0+ PC端虚拟仿真训练系统开发实战:3D引擎集成与交互联动落地
笔记·深度学习·3d·华为·交互·harmonyos
一个人旅程~1 小时前
我存在吗?你存在吗?
笔记·程序人生·电脑·ai写作
xqqxqxxq1 小时前
Java IO 核心:BufferedReader/BufferedWriter & PrintStream/PrintWriter 技术笔记
java·笔记·php
第七序章1 小时前
【Linux学习笔记】初识Linux —— 理解gcc编译器
linux·运维·服务器·开发语言·人工智能·笔记·学习
-Springer-2 小时前
STM32 学习 —— 个人学习笔记5(EXTI 外部中断 & 对射式红外传感器及旋转编码器计数)
笔记·stm32·学习
崎岖Qiu2 小时前
【计算机网络 | 第十篇】以太网的 MAC 层
网络·笔记·计算机网络·mac地址
BlackWolfSky2 小时前
鸿蒙高级课程笔记2—应用性能优化
笔记·华为·harmonyos
玄同7652 小时前
Python Random 模块深度解析:从基础 API 到 AI / 大模型工程化实践
人工智能·笔记·python·学习·算法·语言模型·llm
符哥20083 小时前
C++ 适合初学者的学习笔记整理
c++·笔记·学习
ujainu3 小时前
让笔记触手可及:为 Flutter + OpenHarmony 鸿蒙记事本添加实时搜索(二)
笔记·flutter·openharmony