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

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

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

相关推荐
Bunny02123 小时前
SpringMVC笔记
java·redis·笔记
贾贾20239 小时前
配电网的自动化和智能化水平介绍
运维·笔记·科技·自动化·能源·制造·智能硬件
xiaocao_102311 小时前
手机备忘录:安全存储与管理个人笔记的理想选择
笔记·安全·智能手机
索然无味io11 小时前
XML外部实体注入--漏洞利用
xml·前端·笔记·学习·web安全·网络安全·php
王磊鑫12 小时前
Java入门笔记(1)
java·开发语言·笔记
安冬的码畜日常12 小时前
【Vim Masterclass 笔记22】S09L40 + L41:同步练习11:Vim 的配置与 vimrc 文件的相关操作(含点评课内容)
笔记·vim·vim配置·vim同步练习·vim options·vim option-list
追Star仙13 小时前
基于Qt中的QAxObject实现指定表格合并数据进行word表格的合并
开发语言·笔记·qt·word
安冬的码畜日常14 小时前
【Vim Masterclass 笔记24】S10L43 + L44:同步练习10 —— 基于 Vim 缓冲区的各类基础操作练习(含点评课)
笔记·vim·自学笔记·vim同步练习·vim缓冲区·vim buffer·vim缓冲区练习
一只码代码的章鱼14 小时前
粒子群算法 笔记 数学建模
笔记·算法·数学建模·逻辑回归
圆圆滚滚小企鹅。15 小时前
刷题笔记 贪心算法-1 贪心算法理论基础
笔记·算法·leetcode·贪心算法