《C++类和对象》完结

本文详细讲解了C++中类和对象的关键概念,包括赋值重载、运算符重载的原理,const成员函数的使用,构造函数、静态成员和友元的特性,以及类部类的设计。通过实例展示了如何在类中实现这些功能并提升代码可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++类和对象

前言:

续上篇第四个默认成员函数赋值重载开始讲起,讲完这个知识,C++中六个默认成员函数中最重要的四个我们都讲了。

一.赋值重载

1.1运算符重载

在讲赋值重载之前要先了解C++运算符重载知识,编译器对内置类型比如int、double类型直接使用运算符,比如整型的大小比较,赋值等等。

这是因为对于内置类型,编译器知道它的比较规则以及处理方法。而对于自定义类型如何进行比较和处理,编译器是不清楚的。在C语言中使用比较函数进行比较:

在这里插入图片描述

C++也是实现比较函数完成比较的,但是Date类的成员变量是私有,无法在全局中使用,有没有什么解决方法呢?

class Date
{
public:
	Date(int year = 1, int month = 1, int day = 1)
	{
		_year = year;
		_month = month;
		_day = day;
	}
	//定义在类里面,对象就可以访问私有成员了
	bool Equal(const Date& d)//成员函数有隐藏的this指针
	{
		return (_year == d._year &&
			_month == d._month &&
			_day == d._day);
	}

private:
	int _year;
	int _month;
	int _day;
};

int main()
{
	Date d1(2023, 1, 22);
	Date d2(2023, 1, 21);
	d1.Equal(d2);
	return 0;
}

函数名Equal的可读性还是可以接受的,但是有不省心的人用奇奇怪怪的函数名,比如Compare,更有甚者xiangdeng。

祖师爷想:规定一个函数名命名方法,于是operator运算符做函数名出现了。

在这里插入图片描述

这样一来,当d1.operator==(d2)出现的时候,大家一眼就知道要进行相等判断。

但是做到这一步后,祖师爷觉得还没达到预想的效果,就干脆让d1和d2像内置类型一样使用d1==d2进行相等判断。

在这个过程中实现了相等运算符的重载,本来是用来判断内置类型的,**当在类中实现了运算符,类对象就可以像内置类型一样使用==**,以上就是运算符重载的知识。

在这里插入图片描述

关于运算符重载:operator后面加的运算符应该是有在使用的(+、-、>、<、!…等等等),不能自创。比如:@本来就不是运算符,不能operator@进行重载。

1.2赋值重载

讲完运算符重载,我们来讲赋值重载。当在类中定义有相应的运算符重载,类对象才能像内置类型一样使用,如果没有定义就使用则会报错!

在这里插入图片描述

那么没有定义赋值运算符,能不能使用呢?

在这里插入图片描述

答案是能的,因为它是默认成员函数,不显示定义编译器会生成一个。学完运算符重载,我们就可以自己显示定义一个赋值重载

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

啊苏要学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值