(面向对象程序设计)实验四 运算符重载

标签: 面向对象程序设计

一、实验目的

·学习掌握重定义与类有关的运算符。
·把握重载运算符的时机。
·学习掌握把一个类对象转换为另一个类对象。
·学习掌握重载为成员与友元的区别及其带参数的情况。
·学习掌握值返回与引用返回的区别及应用时机。

二、实验内容

(1) 生成一个表示复数的类FS。复数的实部sb和虚部xb作为其数据成员。提供成员函数disp()显示复数(格式:-3+5i或6-2i),重载“+”、“-”为FS类的成员函数,用来计算两个复数的和、差。
思路导航:
① 定义类,设计构造函数和显示函数print();
② 重载运算符“+”、“-”为类FS的成员函数。
③ 实例化FS类的2个对象,并利用重载的运算符对其进行计算。
另外,根据上述定义,试将上述的运算符重载成员函数改写成友元函数。

代码实现1:

#include <iostream.h>
class FS{
	double sb,xb;
public:
	FS(double a=0,double b=0);
	FS & operator+ (FS&);
	FS & operator- (FS&);
	void print();
};

FS::FS(double a,double b)
{
	sb=a;
	xb=b;
}

FS &FS::operator+ (FS &f)
{
	FS g;
	g.xb=xb+f.xb;
	g.sb=sb+f.sb;
	return g;
}

FS &FS::operator- (FS &f)
{
	FS g;
	g.xb=xb-f.xb;
	g.sb=sb-f.sb;
	return g;
}

void FS::print()
{
	cout<<sb<<"+"<<"("<<xb<<"*i"<<")";
}

void main()
//主函数
{
	FS a(-8,3),b(7,-4);
	FS c1;c1=a+b;
	a.print();cout<<"+";b.print();cout<<"=";c1.print();
	cout<<endl;
	FS c2;c2=a-b;
	a.print();cout<<"-";b.print();cout<<"=";c2.print();
	cout<<endl;
}


结果:
在这里插入图片描述
代码实现2:

//运算符重载为友元函数
#include <iostream.h>
class FS{
	double sb,xb;
public:
	FS(double a=0,double b=0);
	friend FS operator+ (FS &,FS &);
	friend FS operator- (FS &,FS &);
	void print();
};

FS::FS(double a,double b)
{
	sb=a;
	xb=b;
}

FS operator+ (FS &g,FS &f)
{
	FS d;
	d.xb=g.xb+f.xb;
	d.sb=g.sb+f.sb;
	return d;
}

FS operator- (FS &g,FS &f)
{
	FS d;
	d.xb=g.xb-f.xb;
	d.sb=g.sb-f.sb;
	return d;
}

void FS::print()
{
	cout<<sb<<"+"<<"("<<xb<<"*i"<<")";
}

void main()//主函数
{
	FS a(8,3),b(7,-14);
	FS c1;c1=a+b;
	a.print();cout<<"+";b.print();cout<<"=";c1.print();
	cout<<endl;
	FS c2;c2=a-b;
	a.print();cout<<"-";b.print();cout<<"=";c2.print();
	cout<<endl;
}


结果:
在这里插入图片描述

(2) 编写一个时间类,实现时间的加、减、读和输出:

代码实现:

//class.h
#include<iostream.h>
class Time
{
public:
	Time(){}
	void SetTime();
	void Display();
	Time operator + (Time &a);
	Time operator - (Time &a);
private:
	int hour,minute,second;
};


//function.cpp
#include <iostream.h>
#include "class.h"

void Time::SetTime()
{
	int a,b,c;
	cout<<"input hour:";
	cin>>a;
	cout<<endl;
	cout<<"input minute:";
	cin>>b;
	cout<<endl;
	cout<<"input second:";
	cin>>c;
	cout<<endl;
	if((a>=0&&a<=60) &&	(b>=0&&b<=60) && (c>=0&&c<=60))
		hour=a,minute=b,second=c;
}

void Time::Display()
{
	cout<<hour<<":"<<minute<<":"<<second<<endl;
}


Time Time::operator + (Time &a)
{
	Time g;
	g.hour=hour+a.hour;
	g.minute=minute+a.minute;
	g.second=second+a.second;
	return g;
}
Time Time::operator - (Time &a)
{
	Time g;
	g.hour=hour-a.hour;
	g.minute=minute-a.minute;
	g.second=second-a.second;
	return g;
}


//overload.cpp
#include <iostream.h>
#include "class.h"
void main()
{
	Time a,b,c;
	cout<<"请输入A的时间:"<<endl;
	a.SetTime();
	cout<<"请输入B的时间:"<<endl;
	b.SetTime();
	cout<<"A的时间为:";
	a.Display();
	cout<<"B的时间为:";
	b.Display();
	cout<<"c=a+b=";
	c=a+b;
	c.Display();
	cout<<endl<<"c=a-b=";
	c=a-b;
	c.Display();
}

结果:
在这里插入图片描述

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

智能推荐

太赞了!Linux 架构师总结的学习笔记,提供下载

  本文字数:1247,阅读时长大约:1分钟 导读:你想学习 Linux 吗? 最近很多小伙伴找我要一些 Linux 基础资料,于是我翻箱倒柜,把这份技术大牛总结的 Linux 归纳笔记找出来,免费共享给大家! 据说有小伙伴靠这份笔记顺利进入 BAT 哦,所以一定要好好学习这份资料! 资料介绍 这份资料非常全面且详细,从 Linux 常用命令到 Linux 常用操作,再到shell编程、...

【底层原理】高级开发必须懂的"字节对齐"

认识字节对齐之前,假定int(4Byte),char(1Byte),short(2Byte) 认识字节对齐 先看段代码:   sizeof(Data1)和sizeof(Data2)分别表示Data1和Data2内存占用字节数,输出结果不一样是因为编译时对Data1和Data2做了不同的字节对齐。Data1的对齐为4Byte,Data2的对齐是2Byte。   假定存储起始地址为...

爬lol全英雄皮肤

初学爬虫简单的爬取一下lol全英雄皮肤,自己写的,和网上CV的好不一样,觉得文章说得过去的记得留下足迹。 一 分析页面 1.英雄列表 首先在英雄页面找到hero_list.js;至于为什么是这个文件,看图: 观察该文件响应头,获取访问的url,打开新的窗口,访问该链接,能获取对应数据。(这边显示在一行很男查看,推荐一款好用的chrome插件JSONView,可以帮帮我们格式化json数据,可以在g...

解决VUE项目重复点击菜单报错:Avoided redundant navigation to current location: “/xxxxx“. 问题

描述: 报错见下图: 解决方法: 在router文件夹下添加下面一段代码...

Nginx 入门指南(十)

负载均衡模块 负载均衡模块用于从upstream指令定义的后端主机列表中选取一台主机。Nginx 先使用负载均衡模块找到一台主机,再使用 upstream 模块实现与这台主机的交互。为了方便介绍负载均衡模块,做到言之有物,以下选取 Nginx 内置的 ip hash 模块作为实际例子进行分析。 配置 要了解负载均衡模块的开发方法,首先需要了解负载均衡模块的使用方法。因为负载均衡模块与之前书中提到的...

猜你喜欢

文本和输入:复制和粘贴

Android提供了一个功能强大的基于剪贴板的复制和粘贴框架。 它支持简单和复杂的数据类型,包括文本字符串,复杂数据结构,文本和二进制流数据,甚至应用程序资产。 简单的文本数据直接存储在剪贴板中,而复杂数据则作为粘贴应用程序与内容提供者解析的参考进行存储。 复制和粘贴在应用程序中以及在实现框架的应用程序之间工作。 由于框架的一部分使用内容提供者,因此本主题假定您熟悉Android内容提供程序API...

[unity]代码批量修改图片、文本文件的AssetBundle的Name

  当项目工程内有大量文件,需要打包成AssetBundle的时候,一个一个打包是一件非常麻烦的事情。 批量修改AssetBundle的Name并对AssetBundle包 进行批量 打包。   批量修改项目工程文件的图片、文本文件的AssetBundle   1.批量建立AssetBundle 1.1修改文件的.meta文件的文本内容 来自参考资料1   ...

[Python] 用K-means算法进行客户分群

目录 一、背景 1.项目描述 2.数据描述 二、相关模块 三、数据可视化 1.数据读取 2.数据可视化 2.1 平行坐标图 2.2 年龄/年收入/消费分数的分布 2.3 年龄/年收入/消费分数的柱状图 2.4 不同性别用户占比 2.5 两两特征之间的关系 2.6 两两特征之间的分布 四、K-means聚类分析 0.手肘法简介 1.基于年龄和消费分数的聚类 2.基于年收入和消费分数的聚类 3.基于年...

CUDA9.0+win10+Visual Studio2017版本配置安装教程

CUDA9.0+win10+Visual Studio2017版本配置安装教程 不幸掉入深度学习的深渊,从此以后无法自拔,哈哈,虽然电脑属于平民配置,但因为有师姐顶配DELL工作站的操练,可以肆无忌惮的配置安装自己想要的东西,一路踩坑,一路爬,一把辛酸泪。安装的时候特别要注意VS和CUDA版本的兼容问题,否则要么卸载重装,要么一系列的路径操作会让你绝望。 如果电脑配置够新,不妨试试安装最新版本的C...

python发送邮件-实操记录-发送一封普通的邮箱

获取smtp服务 开通qq邮箱的smtp服务的流程详情_pyhui的技术博客-CSDN博客 https://blog.csdn.net/ifubing/article/details/104499005 他说以后会得到一串密码 代码:功能实现 逻辑图 实例化 键 键 键 参数1 参数2 实例化得到 实例化得到 等于 等于 参数1 参数2 实例化 实例化 参数1 参数1 参数1 实例化 实例化 实例...