C++面向对象——函数重载与运算符重载

标签: C++  c++  面向对象编程

函数重载

1.函数重载是指可以有多个同名的函数,或函数名相同,但参数列表不同(特征标不同)。

2.函数重载满足的条件

(1)在同一个作用域下

(2)函数名称相同

(3)函数的参数类型不同,或者个数不同,或者顺序不同

3.函数的返回值不同(其他情况相同)不可以作为函数重载的条件

4.注意避免出现同时定义以下两个函数的错误

void Swap ( int a , int b );
void Swap ( int& a, int& b);

 编译器会认为这两个函数的特征标相同,因而无法做出“究竟应该调用哪个函数”判断。

因为编译器在编译时,会根据参数列表对函数进行重命名。

🌰:

void Swap ( int a , int b );

在编译时函数名会被重命名为 Swap_int_int

void Swap ( int& a, int& b);也是如此。

5.

void Func(int &a);
Func(10);                        //错误,相当于int &a=10;
void Func(const int &a);
Func(10);                         //正确,相当于const int &a=10;

运算符重载

1.运算符重载可以作为类成员函数,也可以做全局函数

2.运算重载符不可以改变语法结构

3.运算重载符不可以改变操作数的个数

4.运算重载符不可以改变优先级

5.运算重载符不可以改变结合性。

6.可重载运算符与不可重载运算符(截自菜鸟教程——C++运算符重载

一些重载实例

#include <iostream>
using namespace std;

class MyInt {

friend ostream& operator<<(ostream& out, MyInt p) {
    out << "num1 = " << p.num1 << endl;
    out << "num2 = " << p.num2;
    return out;
}

private:
    int num1;
    int num2;

public:
    MyInt(int a = 10, int b = 30) {
    	num1 = a;
	num2 = b;
    }
    MyInt operator+(const MyInt &p) {
	MyInt temp;
	temp.num1 = this->num1 + p.num1;
	temp.num2 = this->num2 + p.num2;
        return temp;
    }
    MyInt operator-(const MyInt& p) {
	MyInt temp;
	temp.num1 = this->num1 - p.num1;
	temp.num2 = this->num2 - p.num2;
	return temp;
    }
    MyInt& operator++() {
	num1++;
	num2++;
	return *this;
    }
    MyInt operator++(int) {
	MyInt temp = *this;
	num1++;
	num2++;
	return temp;
    }
    bool operator==(const MyInt& p) {
	if (this->num1 == p.num1 && this->num2 == p.num2) {
		return true;
	}
	else {
		return false;
	}
    }
    bool operator<(const MyInt& p) {
	if (this->num1 < p.num1 && this->num2 < p.num2) {
		return true;
	}
	else {
		return false;
	}
    }
};
void test() 
{
    MyInt iNum(10, 30);
    cout << iNum << endl << iNum++ << endl << ++++iNum << endl << iNum << endl;
    MyInt iNum01(5, 25);
    MyInt iNum02(10, 30);
    MyInt iNum03(10, 30);
    MyInt iNum04(10, 25);
    cout << (iNum01 == iNum02) << endl;
    cout << (iNum02 == iNum03) << endl;
    cout << (iNum01 < iNum03) << endl;
    cout << (iNum01 < iNum04) << endl;
}

int main() 
{
    test();
    return 0;
}

输出结果

num1 = 13
num2 = 33
num1 = 12
num2 = 32
num1 = 12
num2 = 32
num1 = 10
num2 = 30
0
1
1
0

 

版权声明:本文为x568059888原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/x568059888/article/details/104849724

智能推荐

更改springboot启动拼成的字母

1.更改springboot启动拼成的字母 其实很好改,只需要在resources下新建一个txt文件就可以,命名为banner.txt,那这种字符该怎么拼出来呢,下面推荐一个网址,有这种工具 传送门 2.集成...

Node.js安装配置

好久都没更新博客了,今天心血来潮,决定是时候更新一篇了,首先我们来认识一下node.js。 什么是node.js? 简单的说 Node.js 就是运行在服务端的 JavaScript。 Node.js 是一个基于Chrome JavaScript 运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行Javascript的...

RocketMQ之双Master集群搭建笔记记录

一:RocketMQ双master集群部署 服务器环境(我采用的虚拟机,centos6 .5【特别注意:安装的虚拟机centos系统一定得是64位的,32位的会启动不起来。即便起来了也会有很多问题,深坑勿踩】)  ip       用户名    密码        角色     模式 192.168.197.101   root        nameServer1,brokerServer1  ...

蓝桥杯试题集-基础练习题-数列特征(Java)

//做题笔记,仅自己看得懂 题目: 正确姿势:...

多线程爬取4k超高清美图壁纸

多线程爬取4k美图壁纸 前言:看完此篇文章你可以更加深入的了解多线程的使用,并且最重要的你能够下载你自己想要的超高清4k壁纸 爬取结果: 1. 分析网站 要爬取的url :http://pic.netbian.com/ a) 判断网页是动态加载还是静态加载页面。右击查看网页源代码,按Ctrl + f在源代码中搜索网站的详情页地址,从而判断整个网页是静态加载的 b) 明确爬取的目标。我们要爬取的目标...

猜你喜欢

elementUI-添加自定义图标

elementui的小图标有限,跟UI给的不一样,这个时候咋办呢?百度走起。。。。参考了两篇博主分享的 自定义elementui中的图标 和 建立图标库,这里主要用到第一种 实际中: elementUI导航栏 具体代码: 汉字转换Unicode编码: 直接打开控制台: 汉字.chatCodeAt().toString(16); 然后回车; 至于三角形的图标,我直接把箭头的 unicode 值改成了...

[Linux]——文件缓冲区

文件缓冲区 提到文件缓冲区这个概念我们好像并不陌生,但是我们对于这个概念好像又是模糊的存在脑海中,之间我们在介绍c语言文件操作已经简单的提过这个概念,今天我们不妨深入理解什么是文件缓冲区。 为什么需要文件缓冲区 当我们在程序中写下一条printf语句时,我们希望将这条语句的内容打印到屏幕上。但是如果你将语句放在循环中,难道你执行一次循环那么操作系统就要打印一次这条数据么?答案当然不是 我们对于程序...

基于FPGA的IIC协议详解——EEPROM控制器(1)

IIC协议举例 常用IIC协议使用地方 常见IIC协议的注意点 24LC64芯片读写命令的时序图 eeprom控制器的系统框图 时序图设计 代码设计 EEPROM控制器测试模块的代码 结束语 常用IIC协议使用地方 熟悉一个协议一定要知道这个协议应该用到什么地方,IIC协议作为飞利浦公司定义的一个慢速传输协议,常用于: 1、芯片寄存器的配置; 2、eeprom的读写; 本次实验我们将使用eepro...

ssm 工程简易搭建(idea 工具下)

现在都流行springboot了,大部分都给你配合了了,可以快速开发。但是今天我们回顾一下ssm的搭建,其实也挺简单的,比刚入门那会觉得简单多了。 这个先讲几点: 1.开始搭建前,idea 自己要配置maven 和tomcat和jdk ,这里就不讲了。 2.为了简化配置,我们按照“约定优于配置”的原则(这种原则在sprigboot项目里面特别明显),启动项目时,项目有个文件...

oracle简单视图read only、check option和默认权限的异同(相对于DML语句)

视图分为俩类: 简单视图:   视图所代表的sql中如果没有group by语句,   没有组函数,查询的只有一张表,那么这样的视图就是简单视图. 复杂视图   视图所代表的sql中如果有group by语句,   或者有组函数,或者查询的是多张表,那么这样的视图就是复杂视图. s_emp表格属性 默认权限 1.可以插入不满足where条件的数据,原表也会更...