C++实验5运算符重载

开发工具及环境: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了解进行运算符重载要注意的问题.

猜你喜欢

转载自blog.csdn.net/qq_44621510/article/details/90093848