C++上机实验三
本人就一枚大三计科小辣鸡,刚好用csdn记录自己的学习记录,如果有什么错误,希望可以指出,谢谢啦!
实验题目如下:
- 定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编程序,分别求两个复数之和、差、积和商。
- 对于2行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: