西电C++上机实验三

C++上机实验三

本人就一枚大三计科小辣鸡,刚好用csdn记录自己的学习记录,如果有什么错误,希望可以指出,谢谢啦!
实验题目如下:

  1. 定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积和商。
  2. 对于2行3列矩阵,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于矩阵的输入和输出。
  3. 定义Time类和Date类,Time类为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,输出年、月、日和时、分、秒。
    4.分别定义Teacher(教师)类和Cadre(干部)类,采用多继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)。要求:
    (1)在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。
    (2)在Teacher类中还包含数据成员titile(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。
    (3)对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。
    (4)在类体中声明成员函数,在类外定义成员函数。
    (5)在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务与工资。
    5.写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它的每一个元素指向一个派生类对象。

第一题

本题考查运算符的重载,类内的重载形式为:
<数据类型> operator <运算符>(){
}
举例:

Complex operator +(Complex &a){
   
		Complex t(0,0);
		t.shi = a.shi +shi;
		t.xu = a.xu + xu;
		return t;
	}

做 Complex t = a+b运算时,相当于t = a.operator +(b);
特别指出,此种实现与重载为类的友元函数的表达上有一定的区别。
得知以后,此题就不难实现

#include<iostream>
using namespace std;
 
class Complex{
   
public:
	Complex(int x,int y){
   
	shi = x;
	xu = y;
	}
	Complex operator +(Complex &a){
   
		Complex t(0,0);
		t.shi = a.shi +shi;
		t.xu = a.xu + xu;
		return t;
	}
	Complex operator -(Complex &a){
   
		Complex t(0,0);
		t.shi = shi - a.shi;
		t.xu = xu - a.xu;
		return t;
	}
	Complex operator *(Complex &a){
   
		Complex t(0,0);
		t.shi = shi * a.shi -xu*a.xu;
		t.xu = shi*a.xu + xu*a.shi;
		return t;
	}
	Complex operator /(Complex &a){
   
		Complex t(0,0);
		t.shi = (shi*a.shi+xu*a.xu)/(a.shi*a.shi + a.xu*a.xu);
		t.xu = (xu*a.shi - shi*a.xu)/(a.shi*a.shi + a.xu*a.xu);
		return t;
	}
	void show(){
   
		if(xu > 0)
		cout<<shi<<"+"<<xu<<"i"<<endl;
		else if(xu <0)
		cout<<shi<<xu<<"i"<<endl;
		else
		cout<<shi<<endl;
	}
private:
	
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

J@sur

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

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

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

打赏作者

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

抵扣说明:

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

余额充值