C++ 学习 ::【基础篇:17】:C++ 类与对象:运算符重载介绍、运算符重载函数(类内与类外区别)写法及简单设计实现

news/2024/12/2 22:45:45/

本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段:基础篇、STL 篇、高阶数据结构与算法篇,相关重点内容如下:

  1. 基础篇类与对象(涉及C++的三大特性等);
  2. STL 篇学习使用 C++ 提供的 STL 相关库
  3. 高阶数据结构与算法篇手动实现自己的 STL 库设计实现高阶数据结构,如 B树、B+树、红黑树等。

学习集:

  • C++ 入门到入土!!!学习合集
  • Linux 从命令到网络再到内核!学习合集

本期内容:C++ 类的基本成员函数:赋值运算符重载【初步介绍运算符重载:后续有阶段小项目对应实现示例】


目录:
1. 运算符重载的认识
2. 运算符重载函数写法
3. 运算符重载函数的注意点
4. 运算符重载的探讨:类内与类外写法区别
- - 4.1 类内写法
- - 4.2 类外写法
5. 赋值运算符的重载(特殊点)【类的第五种基本成员函数】
6. 相关文章推荐


【 C++学习合集链接 】


1. 运算符重载的认识

C++为了 增强代码的可读性 引入了 运算符重载


运算符重载是具有特殊函数名的函数。其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。


2. 运算符重载函数写法

  • 函数名字为:关键字 operator 后面接需要重载的运算符符号。

  • 函数原型:返回值类型 operator 操作符 (参数列表)

【 代码示例说明如下 】

/* 相等运算符重载 */
bool operator == (对象1,对象2){}等号重载/* 大于运算符重载 */
bool operator > (对象1,对象2){}大于重载/* 流插入运算符重载 */
istream operator >> (对象1,对象2){}流插入运算符重载

3. 运算符重载函数的注意点

  1. 不能通过连接其他符号来创建新的操作符:比如operator@

  2. 重载操作符必须有一个类类型参数。

  3. 用于内置类型的运算符,其含义不能改变,例如:内置的整型+,本义:加和,不能改成其他:如做差。

  4. 作为类成员函数重载时,其形参看起来比操作数数目少 1,因为成员函数的第一个参数为隐藏的 this。(强调)【相关文章说明:类的this指针:C++ 学习 ::【基础篇:11】:C++ 类的基本使用与非静态 this 指针(两个面试考点):类的空指针问题(this指针可以为空吗?) | this指针存在哪里?】

  5. .、.*、 ::、 sizeof、 ?: . 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。


4. 运算符重载的探讨:类内与类外写法区别

运算符的重载应该写全局还是局部?还是都可以?如果都可以,有什么区别?


答:两者都可以,但是有区别!区别应取决于重载对象,而且有的运算符推荐使用类内重载!


以 等号 重载为例:

  • 参数:全局写法:两个对象;局部写法:一个对象(因含有隐含参数 this 指针标识了一个对象);
  • 成员变量访问限制:全局写法:可能受限(取决于访问限制符);局部写法:不受限制;
代码示例
#include<iostream>
using std::endl;
using std::cout;class Date {
public:Date(int year = 1970, int month = 1, int day = 1) {_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};int main() {return 0;
}

4.1 类内写法

  1. 只需一个参数(第二个参数);【隐含 this 指针:是第一个参数】
  2. 类内访问类成员属性/变量无约束!
/*局部写法:即写在类的内部,无成员变量的访问限制等问题;且参数列表写一个参数即可!
*/
bool operator == (const Date& d){return this->_year == d._year && this->_month == d._month && this->_day == d._day;
}

4.2 类外写法

  1. 需要两个参数,分别作为运算符的左右操作数;
  2. 由于可能受访问类成员属性/变量的限制,需要提供类外访问接口;【如下代码中的说明!】
bool operator == (const Date& d1, const Date& d2){return d1._year == d2._year && d1._month == d2._month && d1._day == d2._day;
}/*注意:以上全局写法访问成员变量是会被限制的,而解决访问一般是在类中设计返回数据接口的方式实现问题的解决!(其他方式:私有成员公有化)
*//* 类中添加公有成员函数 */
int GetYear(){ return _year; }
int GetMonth(){ return _month; }
int GetDay(){ return _day; }/* 全局写法修改 */
bool operator == (const Date& d1, const Date& d2){return d1.GetYear() == d2.GetYear() && d1.GetMonth() == d2.GetMonth() && d1.GetDay() == d2.GetDay();
}

5. 赋值运算符的重载(特殊点)【类的第五种基本成员函数】

点此跳转


5. 相关文章推荐

1. C++ 学习 ::【基础篇:12】:C++ 类的基本成员函数:构造函数基本的定义与调用 |(无参构造与有参构造及缺省参数式构造)
2. C++ 学习 ::【基础篇:13】:类的基本成员函数:类类型成员与构造函数问题
3. C++ 学习 ::【基础篇:14】:C++ 类的基本成员函数:析构函数的作用 及 自定义析构函数情形
4. C++ 学习 ::【基础篇:15】:C++ 类的基本成员函数:析构顺序问题(全局/静态/局部量) 及 类类型(自定义类型)与析构函数
5. C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用


http://www.ppmy.cn/news/188862.html

相关文章

OPPOA59换屏总成

前言 前不久手机屏幕坏了&#xff08;外屏&#xff09;&#xff0c;然后去某宝看了一下&#xff0c;大概外屏的价格10块钱左右&#xff08;普通的&#xff09;&#xff0c;好点的20-30左右。然后顺便了解了一下&#xff0c;新手外屏成功率比较低&#xff0c;还容易弄坏内屏&am…

华为OD机试真题 Java 实现【查找两个字符串a,b中的最长公共子串】【牛客练习题】

一、题目描述 查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。 注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开! 数据范围:字符串长度1≤length≤300 。 二、输入描述 输入两个字符串…

系统自学黑客/网络安全技术三要素:手快、眼快、脑子快

前言 网络安全这个行业优势有&#xff1a;需求量大&#xff0c;人才紧急&#xff0c;门槛低&#xff0c;工资高。对于许多未曾涉足IT行业「小白」来说&#xff0c;深入地学习网络安全是一件十分困难的事。 关于我 本人是一位90后奇安信驻场网络安全工程师。上海交通大学软件…

自学黑客(网络安全/Web安全),一般人我还是劝你算了吧

由于我之前写了不少网络安全技术相关的文章&#xff0c;不少读者朋友知道我是从事网络安全相关的工作&#xff0c;于是经常有人私信问我&#xff1a; 我刚入门网络安全&#xff0c;该怎么学&#xff1f; 要学哪些东西&#xff1f; 有哪些方向&#xff1f; 怎么选&a…

55寸电视尺寸长宽高多少

长约1.21米左右&#xff0c;宽约0.69米左右。以55英寸的小米电视5为例&#xff0c;电视长度约为1.22米&#xff0c;高度约为0.71米&#xff0c;含脚架高度约0.77米&#xff0c;整机的重量大约在17kg左右。 通常电视尺寸指电视屏幕对角线的长度&#xff0c;换算成厘米需要将英寸…

计算机屏幕大小怎么计算,电视机尺寸怎么算 电视机的尺寸换算公式

电视机尺寸怎么算? 屏幕尺寸&#xff0c;是指屏幕对角线的尺寸&#xff0c;一般用英寸来表示。 不少朋友想买电视又不知道怎么计算电视尺寸&#xff0c;虽然现在商家都说明&#xff0c;但又怕被商家忽悠。 下面&#xff0c;本文收集了电视机的尺寸换算公式&#xff0c;教你如何…

55寸平板救不了互联网电视行业(2014-10-11 13:46)

日前&#xff0c;有报道称&#xff0c;一家国内电视厂商正在准备推出55英寸的平板电脑&#xff0c;“凡是消费者的手机、PAD终端可以看的视频内容全部可以投射到这个大平板上观看。” 电视厂商不安心做电视&#xff0c;却要做55英寸的大平板&#xff0c;其背后的意图不言自明—…

Qt基础:快捷键

快捷键功能CtrlTab快速切换已打开的文件AltEnter快速添加函数实体(.cpp&#xff09;F4在同名的头文件和源程序文件之间切换F2跟踪光标下的符号&#xff0c;若是变量&#xff0c;可跟踪到变量声明的地方&#xff1b;若是函数体或函数声明&#xff0c;可在两者之间切换ShiftF2在函…