开发工具及环境:PC机一套 Visual Studio 2010
实验要求:
1.硬件基本配置:Intel PentiumIII以上级别的CPU,大于64MB的内存。
2.软件要求:Window 2000操作系统,Visual Studio 6.0或更高版本开发环 境。
3.实验学时:2学时
4.实现实验内容中的题目。
5.写实验报告
实验目的:
进一步了解运算符重载的概念和使用方法。
掌握几种常用的运算符重载的方法。
了解转换构造函数的使用方法。
了解在Visual C++6.0环境下进行运算符重载要注意的问题.
三【实验内容】
声明一个复数类Complex,重载运算符“+‘’,“一”,“*”,“/”使之能用于复数
的加、减、乘、除.运算符重载函数作为Complex类的成员函数,重载流提取运算符实现对复数的输出。编程序,分别求两个复数之和、差、积和商并用重载后的流运算符进行输出。//25分
请思考:你编的程序能否用于一个整数与一个复数的算术运算?如:Complex c1(5,-2)
实现求4+c1.
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;};
Complex(double r, double i){real = r; imag = i;}
double get_real();
double get_imag();
Complex operator+(Complex &c2);
Complex operator-(Complex &c2);
Complex operator*(Complex &c2);
Complex operator/(Complex &c2);
void display();
private:
double real;
double imag;
};
double Complex::get_real()
{
return real;
}
double Complex::get_imag()
{
return imag;
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl; //输出复数
}
Complex Complex::operator+(Complex &c2)//重载运算符”+”
{
Complex c;
c.real = real + c2.real;
c.imag = imag + c2.imag;
return c;
}
Complex Complex::operator-(Complex &c2)//重载运算符”-”
{
Complex c;
c.real = real - c2.real;//计算实部
c.imag = imag - c2.imag;//计算虚部
return c;
}
Complex Complex::operator*(Complex &c2)//重载运算符”*”
{
Complex c;
c.real = real * c2.real;
c.imag = imag * c2.imag;
return c;
}
Complex Complex::operator/(Complex &c2)//重载运算符”/”
{
Complex c;
c.real = real / c2.real;
c.imag = imag / c2.imag;
return c;
}
int main()
{
Complex c1(5,-2),c2(5,-10),c3;
cout<<"c1 = ";
c1.display();
cout<<"c2 = ";
c2.display();
c3 = c1 + c2;
cout<<"c1 + c2 = ";
c3.display();
c3 = c1 - c2;
cout<<"c1 - c2 = ";
c3.display();
c3 = c1 * c2;
cout<<"c1 * c2 = ";
c3.display();
c3 = c1 / c2;
cout<<"c1 / c2 = ";
c3.display();
return 0;
}
(2) 声明一个复数类Complex,重载运算符“+“,使之能用于复数的加法运算//25分
参加运算的两个运算量可以都是类对象.也可以其中有一个是整数,顺序任意。例如,
cl+c2, i+cl,cl+i均合法(设i为整数,c1, c2为复数)。
运行程序.分别求两个复数之和、整数和复数之和。、
#include<iostream>
using namespace std;
class Complex
{
public:
Complex(){real=0;imag=0;};
Complex(double r, double i){real = r; imag = i;}
double get_real();
double get_imag();
Complex operator+(Complex &c2);//运算符重载为成员函数
Complex operator+(int &i);//运算符重载为成员函数
friend Complex operator+(int &i,Complex &c);//运算符重载为友元函数
void display();
private:
double real;
double imag;
};
double Complex::get_real()
{
return real;
}
double Complex::get_imag()
{
return imag;
}
void Complex::display()
{
cout<<"("<<real<<","<<imag<<"i)"<<endl;
}
Complex Complex::operator+(Complex &c)
{
return Complex(real + c.get_real(),imag + c.get_imag());
}
Complex Complex::operator+(int &i)
{
return Complex(real + i, imag);
}
Complex operator+(int &i,Complex &c)
{
return Complex(i + c.get_real(), c.get_imag());
}
int main()
{
Complex c1(3,4),c2(5,-10),c3;
int i = 5;
c3 = c1 + c2;
cout<<"c1 + c2 = ";
c3.display();
c3 = i + c1;
cout<<"i + c1 = ";
c3.display();
c3 = c1 + i;
cout<<"c1 + i = ";
c3.display();
return 0;
}
有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵
相加。如c=a+b。//25分
#include <iostream>
using namespace std;
class Matrix
{public:
Matrix();
friend Matrix operator+(Matrix &,Matrix &);
void input();
void display();
private:
int mat[2][3];
};
Matrix::Matrix() //定义构造函数
{for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
mat[i][j]=0;
}
Matrix operator+(Matrix &a,Matrix &b) //定义重载运算符+函数
{Matrix c;
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
{c.mat[i][j]=a.mat[i][j]+b.mat[i][j];
}
return c;
}
void Matrix::input() //定义输入数据函数
{ cout<<"please input numbers:"<<endl;
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
cin>>mat[i][j];
}
void Matrix::display() //定义输出数据函数
{for (int i=0;i<2;i++)
{for(int j=0;j<3;j++)
{cout<<mat[i][j]<<" ";}
cout<<endl;}
}
int main()
{Matrix a,b,c;
a.input();
b.input();
cout<<endl<<"Matrix a:"<<endl;
a.display();
cout<<endl<<"Matrix b:"<<endl;
b.display();
c=a+b; //用重载运算符+实现两个矩阵相加
cout<<endl<<"Matrix c = Matrix a + Matrix b :"<<endl;
c.display();
return 0;
}
(4)、声明一个Teachers(教师)类和一个Student(学生)类,二者有一部分数据成员
是相同的.例如id(身份证号码),name(姓名),sex(性别)。编写程序,将一个Student对象(学生)转换为Teacher(教师)类.只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当
保留并成为其教师的数据的一部分。//25分
#include<iostream>
#include<string.h>
using namespace std;
class Student{
public:
Student(int,char[],char,float);
int get_num(){return num;}
char *get_name(){return name;}
char get_sex(){return sex;}
void display()
{cout<<"num : "<<num<<"\nname : "<<name<<"\nsex : "<<sex<<"\nscore"<<score<<endl;}
private:
int num;
char name[20];
char sex;
float score;
};
Student::Student(int n, char nam[], char s, float sco)
{
num = n;
strcpy(name,nam);
sex = s;
score = sco;
}
class Teacher
{
public:
Teacher(){}
Teacher(Student&);
Teacher(int n, char nam[], char sex, float pay);
void display();
private:
int num;
char name[20];
char sex;
float pay;
};
Teacher::Teacher(int n, char nam[], char s, float p)
{
num = n;
strcpy(name,nam);
sex = s;
pay = p;
}
Teacher::Teacher(Student &stu)
{
num = stu.get_num();
strcpy(name,stu.get_name());
sex = stu.get_sex();
pay = 1500;
}
void Teacher::display()
{
cout<<"num : "<<num<<"\nname : "<<name<<"\nsex : "<<sex<<"\npay"<<pay<<endl;
}
int main()
{
Teacher teacher1(10001,"Li",'f',1234.5),teacher2;
Student student1(20001,"xiaoming",'m',97.5);
cout<<"student1 :"<<endl;
student1.display();
teacher2 = Teacher(student1);
cout<<"teacher2 : "<<endl;
teacher2.display();
return 0;
}
结果与分析 ( 收获、问题 )
进一步了解运算符重载的概念和使用方法。
掌握几种常用的运算符重载的方法。
了解转换构造函数的使用方法。
-6了解进行运算符重载要注意的问题.