C++运算符的重载

2023-11-10

前言

运算符重载是编译器提供给用户自定义的一种更方便的工作方式

定义

其实就是重新定义一些运算符的意思的,比如是让加法可以在类之间进行,当然我们要使用到关键字operator,话不多说,直接上代码

class Stu
{
public: 
	friend Stu operator+ (Stu &a,Stu &b);
	Stu (int a=0,int b=0)
	{
		this ->a =a;
		this ->b =b;
	}
	void prt()
	{
		cout<<"a="<<a<<" b="<<b<<endl;
	}


public:
	int a;
	int b;


};
Stu operator+ (Stu &a,Stu &b) //其实本质就是一个函数,通过重定
义的方式让他使用简单
{
	Stu c(a.a+b.a,a.b+b.b);
	return c;
}
Stu add (Stu &a,Stu &b) 
{
	Stu c(a.a+b.a,a.b+b.b);
	return c;
}


int main(int argc, char *argv[])
{
	Stu a(1,2),b(3,4);
	Stu c=add (a,b);//本质是一个函数,当然也可以这样调用
	Stu c =a+b;
//	Stu c=a.operator+ (b);
	c.prt();
	return 0;
}

类的属性为私用的时候

你如果阅读上面的代码你就会发现,在这里面,属性必须是公有的,不然外界不能访问,这时候我们就可以用到我们的友元函数了

class Stu
{
public: 
	friend Stu operator+ (Stu &a,Stu &b); //定义他为友元函数,就可以访问他私有额的数据了
	Stu (int a=0,int b=0)
	{
		this ->a =a;
		this ->b =b;
	}
	void prt()
	{
		cout<<"a="<<a<<" b="<<b<<endl;
	}
/*
Stu operator+ (Stu &b) //当然,你也可以写一个成员函数
{
	Stu c(this ->a+b.a,this ->b+b.b);
	return c;
}
*/

public:
private:
	int a;
	int b;


};
Stu operator+ (Stu &a,Stu &b)
{
	Stu c(a.a+b.a,a.b+b.b);
	return c;
}


int main(int argc, char *argv[])
{
	Stu a(1,2),b(3,4);

	Stu c =a+b;
//	Stu c=a.operator+ (b);
	c.prt();
	return 0;
}

友元函数 重载 << >>操作符

stream 和 ostream 是 C++ 的预定义流类

  1. cin 是 istream 的对象,cout 是 ostream 的对象
  2. 运算符 << 由ostream 重载为插入操作,用于输出基本类型数据
  3. 运算符 >> 由 istream 重载为提取操作,用于输入基本类型数据 用友员函数重载
  4. << 和 >> ,输出和输入用户自定义的数据类型
class Stu
{
public: 
	friend istream& operator>> (istream &p,Stu &b);//定义为友元可以访问私有成员
	friend ostream& operator<< (ostream &p,Stu &b);
	Stu (int a=0,int b=0)
	{
		this ->a =a;
		this ->b =b;
	}
	void prt()
	{
		cout<<"a="<<a<<" b="<<b<<endl;
	}

private:
	int a;
	int b;
};
ostream& operator<< (ostream &p,Stu &b) //cout的实现,返回值要使用ostream的实现链式操作
{
	p <<"nihao"<<b.a;
	return p;
}

istream& operator>> (istream &p,Stu &b) //和上面同理
{
	p >>b.a;
}


int main(int argc, char *argv[])
{
	Stu a(1,2),b(3,4);
	//	Stu c=add (a,b);
	//	cout<<a<<" wohenhao"<<endl;
	cin>>a;
	a.prt();
	//	Stu c=a.operator+ (b);
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++运算符的重载 的相关文章

随机推荐

  • C++11列表初始化

    2023年7月17日 周一上午 今天在看GitHub上的源码时看到了这种用法 于是研究了一下 并把自己的研究成果记录成博客 目录 C 11为什么要推出列表初始化 举例说明 统一初始化语法 对象和容器的初始化得以用一种统一的方式来进行 防止窄
  • glsl语法整理

    glsl 语法 main 方法表示入口函数 标量 在GLSL中标量只有bool int和float三种 向量 共有vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3和bvec4九种类型
  • MySQL8 EXPLAIN 命令输出的都是什么东西?这篇超详细!

    引子 小扎刚毕业不久 在一家互联网公司工作 由于是新人 做的也都是简单的CRUD 刚来的时候还有点不适应 做了几个月之后 就变成了熟练工了 左复制 右粘贴 然后改改就是自己的代码了 生活真美好 有一天 领导说他做的有个列表页面速度很慢 半天
  • 结构体的总结

    目录 一 结构体的定义 二 对结构体的重命名 三 结构体和指针的结合 四 结构体和数组的结合 五 结构体大小 六 结构体嵌套 七 动态内存与结构体 八 总结 用结构体对学生成绩实行升序排序 一 结构体的定义 我们之前接触的数据类型有 基本数
  • GreenDAO数据库版本升级

    GreenDAO在进行默认的数据库升级时 会采取先删除所有的表 再全部重新建的操作 这就意味着所有的数据都会遗失 public void onUpgrade SQLiteDatabase db int oldVersion int newV
  • AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

    在运行训练文件时 出现了这样的问题 AttributeError NoneType object has no attribute shape 后来参考了大神文章后发现是因为有的text文件路径不对 改了文件路径后运行没问题了 还可能有以下
  • 卡尔曼滤波(Kalman filter)及预测

    参考文章 https blog csdn net baidu 38172402 article details 82289998 https www jianshu com p 2768642e3abf kalman滤波的作用 1 数据 滤
  • 多层感知机的简洁实现

    import torch from torch import nn from torch nn import init import numpy as np import sys import torchvision from torchv
  • python 中,空的list是否等于None

    文章目录 最近在写测试用例过程中 在判断一个list为空时 随手写下了如下代码 if listinstance is None do something pass 发现当list为空时 程序死活进不去后面的处理语句 于是发现了以下相关文章
  • 从Java到Go:掌握Go语言开发地理位置服务

    目录 目录 1 为什么选择Go 2 Go语言基础 2 1 语法结构 2 2 变量 常量和类型 2 3 函数
  • 位运算技巧集

    位运算技巧集 一般用0xfffffff这种16位数 代替32位二进制数 Java中的幂指数运算不能是 这个符号代表的是异或运算符 与或非异或 两个大于号 向右移位运算 一般可以通过先将需要处理的数字变为二进制数 在观察数字 运算和最终结果之
  • python tcp连接状态判断_Socket套接字连接状态判断,接收数据笔记

    最近工作中涉汲到一些Socket 方面应用 如断线重连 连接状态判断等 今天做了一些总结 1 判断Socket 连接状态 通过 Poll 与 Connected 结合使用 重点关注 SelectRead 模式 方法名 Socket Poll
  • 刷脸支付市场谁才会是最后的大赢家

    2019年 刷脸支付设备的更新非常频繁 支付宝跟微信都推出了自己更新的刷脸设备 这是中国银联也开始战略规划准备迈进人脸识别这个移动支付市场 那么最后谁才会是最后的大赢家呢 每个行业 似乎都有相生相克的行业对手 他们之间的每一次交手 都能成为
  • 睿智的目标检测56——Pytorch搭建YoloV5目标检测平台

    睿智的目标检测56 Pytorch搭建YoloV5目标检测平台 学习前言 源码下载 YoloV5改进的部分 不完全 YoloV5实现思路 一 整体结构解析 二 网络结构解析 1 主干网络Backbone介绍 2 构建FPN特征金字塔进行加强
  • AD629测量负载电流的电路原理详解——精妙绝伦的电路设计

    AD629是ADI公司的一款精密差动放大器 可以承受最大270V的共模电压 使用AD629测量负载电流可以实现在有效抑制共模电压的同时放大差模电压以测量负载电流 如果要测量一个很小的差模信号 很多工程师的第一反应肯定是想到使用仪表放大器 然
  • stat 命令 – 显示文件的状态信息

    stat 命令的功能是用于显示文件的状态信息 Linux 系统中每个文件都有三个 历史时间 最后访问时间 ATIME 最后修改时间 MTIME 最后更改时间 CTIME 用户可以使用 stat 命令查看到它们 进而判别有没有其他人修改过文件
  • unity AR开发中遇到的一些错误总结

    1 Vuforia initialization failed 错误提示如下 Vuforia initialization failed UnityEngine Debug LogError Object Vuforia VuforiaAb
  • JDBC 注册数据库驱动语句

    先附上Microsoft SQL Server JDBC Driver 官方下载地址 https www microsoft com zh cn download driver aspx 初学JDBC 由于数据库软件的不同 我不能按着书上的
  • docker安装及修改默认镜像下载路径和配置加速器

    官方安装 Install Docker Engine on Ubuntu Docker Documentation 镜像存储迁移 Ubuntu20 04修改docker镜像存储位置并进行数据迁移 EastWood001 博客园 cnblog
  • C++运算符的重载

    前言 运算符重载是编译器提供给用户自定义的一种更方便的工作方式 定义 其实就是重新定义一些运算符的意思的 比如是让加法可以在类之间进行 当然我们要使用到关键字operator 话不多说 直接上代码 class Stu public frie