实验五 运算符重载 完成

实验五 运算符重载的应用

班级:B135A2学号: 201322688 姓名: 杨弘 成绩:

一. 实验目的

1、理解运算符重载的作用;

2、掌握运算符重载的两种方法;

3、掌握单目、双目运算符的重载;

二. 使用的设备和仪器

计算机+Windows XP +Visual C++6.0

三. 实验内容及要求

1、定义一个复数类Complex ,重载运算符“-”,使之能用于复数与实数的减法运算。参加运算的两个操作数一个是类的对象,一个是实数,顺序任意。例如:i-c ,c-i 均合法(其中,c 为复数类的对象,i 为实数)。

减法规则:复数实部与实数相减,复数虚部不变。

2、定义点类Point ,重载运算符“+”、“-”、“==”、“!=”、“++”、“--”、“>>”、“

3、定义一个矩阵类Matrix ,均为M 行N 列,通过重载运算符“+”、“-”,“>”, “++”, “--”,“==”,“!=”来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。

4、定义时间类Time ,时间的表示采用24小时制。重载运算符“>”实现时间的输出和输入;重载运算符“+”和“-”实现时间推后和提前若干分钟;重载运算符“++”和“--”实现当前时间推后和提前1小时;重载“>”、“

注意:输入时需对数据合法性进行判断。

5、编写一个程序,处理一个复数与一个double 型数相加的运算,结果存放在一个double 型的变量d1中,输出d1的值,再以复数形式输出此值。定义复数(Complex )类,在成员函数中包含重载类型转换运算符:

Operator double(){ return real;}

6、定义一个教师类和一个学生类,二者有一部分数据成员是相同的,例如num ,name ,sex 。请编程,将一个学生类对象转换为教师类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。

四. 实验步骤

1. 程序代码:/*1、定义一个复数类Complex ,重载运算符"-" ,使之能用于复数与实数的减

法运算。参加运算的两个操作数一个是类的对象,一个是实数,顺序任意。

例如:i-c ,c-i 均合法(其中,c 为复数类的对象,i 为实数)。

减法规则:复数实部与实数相减,复数虚部不变。*/

#include //#include

using std::cin;

using std::cout;

using std::endl;

//using namespace std;

class Complex //定义复数类

{

private:

double real,imag;

public:

Complex()

{

real=0;

imag=0;

}

Complex(double a,double b)

{

real=a;

imag=b;

}

void Display();

void Input();

friend Complex operator-(Complex &a,double b);

friend Complex operator-(double b,Complex &a);

};

Complex operator-(Complex &a,double b) //定义“-”重载函数

{

return Complex(a.real-=b,a.imag);

}

Complex operator-(double b,Complex &a)

{

return Complex(a.real-=b,a.imag);

}

void Complex::Input()

{

cout

cout

cin>>real>>imag;

}

void Complex::Display()

{

cout

cout

}

int main() //主函数

{

Complex c(1,1),c1;

double m;

c.Display();

cout

cin>>m;

c=c-m;

c.Display();

return 0;

}

运行结果:

2. 程序代码:

/*2、定义点类Point ,重载运算符" +" 、" -" 、" ==" 、" !="、"++"、"--" 、">>"、"

//#include

#include

//using std::cin; //用#include加上Using std::cin;using

// std::cout;using std::endl;对重载流插入、流提取运算符错误

//using std::cout;

//using std::endl;

//using namespace std;

class Point //定义point 类

{

private:

double x;

double y;

static int count;

public:

Point()

{

x=0;y=0;

}

void Input();

void Display();

Point operator+(Point &b);

Point operator-(Point &b);

friend int operator==(Point &a,Point &b);

friend int operator!=(Point &a,Point &b);

friend Point operator++(Point &a);

friend Point operator++(Point &a,int);

friend Point operator--(Point &a);

friend Point operator--(Point &a,int);

friend istream & operator>>(istream & input,Point & a);

friend ostream & operator

};

int Point::count=0; //注意赋值时没有static," int static Point::count=0; " wrong!!

void Point::Input()

{

cout

cout

cin>>x>>y;

count++;

}

void Point::Display()

{

cout

cout

}

Point Point::operator+(Point &b) //重载“+”为成员函数

{

Point p;

p.x=x+b.x;

p.y=y+b.y;

return p;

}

Point Point::operator-(Point &b) //重载“-”为成员函数

{

Point p;

p.x=x-b.x;

p.y=y-b.y;

return p;

}

int operator==(Point &a,Point &b) //重载“==”为友员函数

{

if(a.x!=b.x)

return 0;

else if(a.y!=b.y)

return 0;

else

return 1;

}

int operator!=(Point &a,Point &b) //重载“!=”为友员函数

{

if(a.x==b.x&&a.y==b.y)

return 0;

else return 1;

}

Point operator++(Point &a)

{

Point p;

p.x=++a.x;

p.y=++a.y;

return p;

}

Point operator++(Point &a,int)

{

Point c;

c.x=a.x;

c.y=a.y;

a.x++;

a.y++;

return c;

}

Point operator--(Point &a)

{

Point p;

p.x=-a.x;

p.y=--a.y;

return p;

}

Point operator--(Point &a,int)

{

Point c;

c.x=a.x;

c.y=a.y;

a.x--;

a.y--; //重载“++”为友员函数 //重载“++”为友员函数 //重载“--”为友员函数 //重载“--”为友员函数

return c;

}

istream & operator>>(istream & input,Point & a) //重载流插入运算符

{

input>>a.x>>a.y;

return input;

}

ostream & operator

{

outputreturn output;

}

int main()

{

Point a,b;

a.Input();

a.Display();

b.Input();

b.Display();

a=a+b;

couta=a-b;

coutcout>'输入输出:"

cout

cin>>a;

coutcoutcout

cin>>b;

cout

cout

cout

if(a==b)

cout

else if(a!=b)

cout

return 0;

}

运行结果: //主函数

程序代码:/*3、定义一个矩阵类Matrix ,均为M 行N 列,通过重载运算符"+"、"-" ,">","++","--",

"=="," !="来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。*/

#include

using namespace std;

const int M=3;

const int N=3;

class Matrix

{

private:

int X[M][N];

public:

friend Matrix operator+(Matrix a[][N],Matrix b[][N]);

friend Matrix operator-(Matrix &a,Matrix &b);

friend istream & operator>>(istream & input,Matrix &c);

friend ostream & operator

friend Matrix operator++(Matrix &c);

friend Matrix operator--(Matrix &c);

friend int operator==(Matrix &a,Matrix &b);

friend int operator!=(Matrix &a,Matrix &b);

};

Matrix operator+(Matrix a[][N],Matrix b[][N])

{

int i,j;

Matrix c[M][N];

for(i=0;i

for(j=0;j

{

c[i][j]=a[i][j]+b[i][j];

}

return c[M][N];

}

Matrix operator-(Matrix *a,Matrix *b)

{

int i,j;

Matrix c[M][N];

for(i=0;i

for(j=0;j

{

c[i][j]=a[i][j]-b[i][j];

}

return c[M][N];

}

istream & operator>>(istream & input,Matrix *c)

{

int i,j;

for(i=0;i

for(j=0;j

input>>c[i][j];

}

ostream & operator

{

int i,j;

for(i=0;i

for(j=0;j

output

}

Matrix operator++(Matrix *c)

{

int i,j;

for(i=0;i

for(j=0;j

++c[i][j];

return c[M][N];

}

Matrix operator--(Matrix *c)

{

int i,j;

for(i=0;i

for(j=0;j

--c[i][j];

return c[M][N];

}

int operator==(Matrix *a,Matrix *b)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(a[i][j]!=b[i][j])

return 0;

}

return 1;

}

int operator!=(Matrix *a,Matrix *b)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(a[i][j]!=b[i][j])

return 1;

}

return 0;

}

int main()

{

Matrix a[M][N],b[M][N],c[M][N];

cout>"

cin>>a;

cin>>b;

coutcout

cout

c[M][N]=a[M][N]+[M][N];

cout

c[M][N]=a[M][N]-[M][N];

cout

cout

if(a[M][N]==b[M][N])

cout

else

cout

if(a[M][N]!=b[M][N])

cout

else

cout

return 0;

}

4. 程序代码:/*4、定义时间类Time ,时间的表示采用24小时制。重载运算符">"实现时间的输出和输入;

重载运算符"+"和"-" 实现时间推后和提前若干分钟;重载运算符"++"和"--" 实现当前时间推后和提前1小时;

重载">"、"

#include

//using namespace std;

class Time //Define class Time

{

private:

int hour,minute,second;

public:

Time operator--();

Time operator++();

Time operator+(int n);

Time operator-(int n);

friend istream & operator>>(istream & Input,Time & t);

friend ostream & operator

friend int operator

friend int operator>(Time &a,Time &b);

friend int operator==(Time &a,Time &b);

};

istream & operator>>(istream & Input,Time & t) //Overload " >> "

{

//Make sure hour,minute,second right.

Input>>t.hour>>t.minute>>t.second;

while(1)

{

if(t.hour>24||t.hour60||t.minute60||t.second

{

cout

Input>>t.hour>>t.minute>>t.second;

}

if(t.hour0&&t.minute0&&t.second0) break;

}

return Input;

}

ostream & operator

{

Output

return Output;

}

Time Time::operator+(int n) //Overload " + "

{

Time t;

t.hour=hour;

t.minute=minute+n;

t.second=second;

return t;

}

Time Time::operator-(int n)

{

Time t;

t.minute=minute-n;

t.hour=hour;

t.second=second;

return t;

}

Time Time::operator++()

{

Time t;

t.minute=minute;

t.second=second;

++hour;

t.hour=hour;

return t;

}

Time Time::operator--()

{

Time t;

t.minute=minute;

t.second=second;

--hour;

t.hour=hour;

return t;

}

int operator

{

if(a.hour

return 1; //Overload " - " //Overload " ++ " //Overload " -- " //Overload "

else if(a.hour==b.hour&&a.minute

return 1;

else if(a.hour==b.hour&&a.minute==b.minute&&a.second

return 1;

else

return 0;

}

int operator>(Time &a,Time &b) //Overload " > "

{

if(a.hour>b.hour)

return 1;

else if(a.hour==b.hour&&a.minute>b.minute)

return 1;

else if(a.hour==b.hour&&a.minute==b.minute&&a.second>b.second)

return 1;

else

return 0;

}

int operator==(Time &a,Time &b) //Overload " == "

{

if(a.hour!=b.hour)

return 0;

else

if(a.minute!=b.minute)

return 0;

else

if(a.second!=b.second)

return 0;

else return 1;

}

int main()

{

Time t,t0;

cout

cin>>t;

cout

cout

cout

cout

t=t+20;

cout

cout

t=t-10;

cout

cout

++t;

cout

cout

--t;

cout

cout

cin>>t0;

cout

cout

cout

if(t==t0)

cout

else

if(t>t0)

coutt0"

else

cout

return 0;

}

运行结果:

程序代码:/*5、编写一个程序,处理一个复数与一个double 型数相加的运算,结果存放在一个double 型的变量d1中,

输出d1的值,再以复数形式输出此值。定义复数(Complex )类,在成员函数中包含重载类型转换运算符:

Operator double(){ return real;}*/

#include

//using namespace std;

class Complex //Define class Complex

{

private:

double real,imag;

public:

double Complex::operator+(double a);

friend ostream & operator

friend istream & operator>>(istream & input,Complex & a);

Complex() //构造函数

{

real=10;

imag=10;

}

Complex(double a) //定义转换构造函数

{

real=a;imag=0;

}

};

double Complex::operator+(double a) // 重载类型转换符“+”

{

double b;

b=a+real;

return b;

}

ostream & operator

{

outputreturn output;

}

istream & operator>>(istream & input,Complex &a) //重载“ >>”

{

input>>a.real>>a.imag;

return input;

}

int main() // 主函数

{

Complex s;

double a,d1;

cout

cout>a):";

cin>>a;

d1=s+a;

cout

s=d1;

cout

return 0;

}

运行结果:

程序代码:/*6、定义一个教师类和一个学生类,二者有一部分数据成员是相同的,例如num ,name ,sex 。

请编程,将一个学生类对象转换为教师类,只将以上3个相同的数据成员移植过去。可以设想为:

一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,

应当保留并成为其教师的数据的一部分。*/

#include

#include

#include

using namespace std;

class Teacher;

class Student //定义学生类

{

private:

string num,name;

string sex;

public:

void Input();

void Display();

friend class Teacher;

friend Teacher Teacher::operator=(Student & s);

};

class Teacher //定义教师类

{

private:

string number,na;

string s;

public:

void Input();

void Display();

Teacher operator=(Student & s);

};

void Student::Input()

{

cout

cin>>num>>name>>sex;

}

void Student::Display()

{

cout

cout

void Teacher::Input()

{

cout>number>>na>>s;

}

void Teacher::Display()

{

cout

cout

Teacher Teacher::operator=(Student &s)

{

number=s.num;

na=s.name;

s=s.sex;

}

int main()

{

Student s;

Teacher t;

s.Input();

s.Display();

t=s;

t.Display();

return 0;

}

五. 实验总结

实验五 运算符重载的应用

班级:B135A2学号: 201322688 姓名: 杨弘 成绩:

一. 实验目的

1、理解运算符重载的作用;

2、掌握运算符重载的两种方法;

3、掌握单目、双目运算符的重载;

二. 使用的设备和仪器

计算机+Windows XP +Visual C++6.0

三. 实验内容及要求

1、定义一个复数类Complex ,重载运算符“-”,使之能用于复数与实数的减法运算。参加运算的两个操作数一个是类的对象,一个是实数,顺序任意。例如:i-c ,c-i 均合法(其中,c 为复数类的对象,i 为实数)。

减法规则:复数实部与实数相减,复数虚部不变。

2、定义点类Point ,重载运算符“+”、“-”、“==”、“!=”、“++”、“--”、“>>”、“

3、定义一个矩阵类Matrix ,均为M 行N 列,通过重载运算符“+”、“-”,“>”, “++”, “--”,“==”,“!=”来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。

4、定义时间类Time ,时间的表示采用24小时制。重载运算符“>”实现时间的输出和输入;重载运算符“+”和“-”实现时间推后和提前若干分钟;重载运算符“++”和“--”实现当前时间推后和提前1小时;重载“>”、“

注意:输入时需对数据合法性进行判断。

5、编写一个程序,处理一个复数与一个double 型数相加的运算,结果存放在一个double 型的变量d1中,输出d1的值,再以复数形式输出此值。定义复数(Complex )类,在成员函数中包含重载类型转换运算符:

Operator double(){ return real;}

6、定义一个教师类和一个学生类,二者有一部分数据成员是相同的,例如num ,name ,sex 。请编程,将一个学生类对象转换为教师类,只将以上3个相同的数据成员移植过去。可以设想为:一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。

四. 实验步骤

1. 程序代码:/*1、定义一个复数类Complex ,重载运算符"-" ,使之能用于复数与实数的减

法运算。参加运算的两个操作数一个是类的对象,一个是实数,顺序任意。

例如:i-c ,c-i 均合法(其中,c 为复数类的对象,i 为实数)。

减法规则:复数实部与实数相减,复数虚部不变。*/

#include //#include

using std::cin;

using std::cout;

using std::endl;

//using namespace std;

class Complex //定义复数类

{

private:

double real,imag;

public:

Complex()

{

real=0;

imag=0;

}

Complex(double a,double b)

{

real=a;

imag=b;

}

void Display();

void Input();

friend Complex operator-(Complex &a,double b);

friend Complex operator-(double b,Complex &a);

};

Complex operator-(Complex &a,double b) //定义“-”重载函数

{

return Complex(a.real-=b,a.imag);

}

Complex operator-(double b,Complex &a)

{

return Complex(a.real-=b,a.imag);

}

void Complex::Input()

{

cout

cout

cin>>real>>imag;

}

void Complex::Display()

{

cout

cout

}

int main() //主函数

{

Complex c(1,1),c1;

double m;

c.Display();

cout

cin>>m;

c=c-m;

c.Display();

return 0;

}

运行结果:

2. 程序代码:

/*2、定义点类Point ,重载运算符" +" 、" -" 、" ==" 、" !="、"++"、"--" 、">>"、"

//#include

#include

//using std::cin; //用#include加上Using std::cin;using

// std::cout;using std::endl;对重载流插入、流提取运算符错误

//using std::cout;

//using std::endl;

//using namespace std;

class Point //定义point 类

{

private:

double x;

double y;

static int count;

public:

Point()

{

x=0;y=0;

}

void Input();

void Display();

Point operator+(Point &b);

Point operator-(Point &b);

friend int operator==(Point &a,Point &b);

friend int operator!=(Point &a,Point &b);

friend Point operator++(Point &a);

friend Point operator++(Point &a,int);

friend Point operator--(Point &a);

friend Point operator--(Point &a,int);

friend istream & operator>>(istream & input,Point & a);

friend ostream & operator

};

int Point::count=0; //注意赋值时没有static," int static Point::count=0; " wrong!!

void Point::Input()

{

cout

cout

cin>>x>>y;

count++;

}

void Point::Display()

{

cout

cout

}

Point Point::operator+(Point &b) //重载“+”为成员函数

{

Point p;

p.x=x+b.x;

p.y=y+b.y;

return p;

}

Point Point::operator-(Point &b) //重载“-”为成员函数

{

Point p;

p.x=x-b.x;

p.y=y-b.y;

return p;

}

int operator==(Point &a,Point &b) //重载“==”为友员函数

{

if(a.x!=b.x)

return 0;

else if(a.y!=b.y)

return 0;

else

return 1;

}

int operator!=(Point &a,Point &b) //重载“!=”为友员函数

{

if(a.x==b.x&&a.y==b.y)

return 0;

else return 1;

}

Point operator++(Point &a)

{

Point p;

p.x=++a.x;

p.y=++a.y;

return p;

}

Point operator++(Point &a,int)

{

Point c;

c.x=a.x;

c.y=a.y;

a.x++;

a.y++;

return c;

}

Point operator--(Point &a)

{

Point p;

p.x=-a.x;

p.y=--a.y;

return p;

}

Point operator--(Point &a,int)

{

Point c;

c.x=a.x;

c.y=a.y;

a.x--;

a.y--; //重载“++”为友员函数 //重载“++”为友员函数 //重载“--”为友员函数 //重载“--”为友员函数

return c;

}

istream & operator>>(istream & input,Point & a) //重载流插入运算符

{

input>>a.x>>a.y;

return input;

}

ostream & operator

{

outputreturn output;

}

int main()

{

Point a,b;

a.Input();

a.Display();

b.Input();

b.Display();

a=a+b;

couta=a-b;

coutcout>'输入输出:"

cout

cin>>a;

coutcoutcout

cin>>b;

cout

cout

cout

if(a==b)

cout

else if(a!=b)

cout

return 0;

}

运行结果: //主函数

程序代码:/*3、定义一个矩阵类Matrix ,均为M 行N 列,通过重载运算符"+"、"-" ,">","++","--",

"=="," !="来实现矩阵的相加、相减、输出、输入、自增、自减以及相等、不等的判断。*/

#include

using namespace std;

const int M=3;

const int N=3;

class Matrix

{

private:

int X[M][N];

public:

friend Matrix operator+(Matrix a[][N],Matrix b[][N]);

friend Matrix operator-(Matrix &a,Matrix &b);

friend istream & operator>>(istream & input,Matrix &c);

friend ostream & operator

friend Matrix operator++(Matrix &c);

friend Matrix operator--(Matrix &c);

friend int operator==(Matrix &a,Matrix &b);

friend int operator!=(Matrix &a,Matrix &b);

};

Matrix operator+(Matrix a[][N],Matrix b[][N])

{

int i,j;

Matrix c[M][N];

for(i=0;i

for(j=0;j

{

c[i][j]=a[i][j]+b[i][j];

}

return c[M][N];

}

Matrix operator-(Matrix *a,Matrix *b)

{

int i,j;

Matrix c[M][N];

for(i=0;i

for(j=0;j

{

c[i][j]=a[i][j]-b[i][j];

}

return c[M][N];

}

istream & operator>>(istream & input,Matrix *c)

{

int i,j;

for(i=0;i

for(j=0;j

input>>c[i][j];

}

ostream & operator

{

int i,j;

for(i=0;i

for(j=0;j

output

}

Matrix operator++(Matrix *c)

{

int i,j;

for(i=0;i

for(j=0;j

++c[i][j];

return c[M][N];

}

Matrix operator--(Matrix *c)

{

int i,j;

for(i=0;i

for(j=0;j

--c[i][j];

return c[M][N];

}

int operator==(Matrix *a,Matrix *b)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(a[i][j]!=b[i][j])

return 0;

}

return 1;

}

int operator!=(Matrix *a,Matrix *b)

{

int i,j;

for(i=0;i

for(j=0;j

{

if(a[i][j]!=b[i][j])

return 1;

}

return 0;

}

int main()

{

Matrix a[M][N],b[M][N],c[M][N];

cout>"

cin>>a;

cin>>b;

coutcout

cout

c[M][N]=a[M][N]+[M][N];

cout

c[M][N]=a[M][N]-[M][N];

cout

cout

if(a[M][N]==b[M][N])

cout

else

cout

if(a[M][N]!=b[M][N])

cout

else

cout

return 0;

}

4. 程序代码:/*4、定义时间类Time ,时间的表示采用24小时制。重载运算符">"实现时间的输出和输入;

重载运算符"+"和"-" 实现时间推后和提前若干分钟;重载运算符"++"和"--" 实现当前时间推后和提前1小时;

重载">"、"

#include

//using namespace std;

class Time //Define class Time

{

private:

int hour,minute,second;

public:

Time operator--();

Time operator++();

Time operator+(int n);

Time operator-(int n);

friend istream & operator>>(istream & Input,Time & t);

friend ostream & operator

friend int operator

friend int operator>(Time &a,Time &b);

friend int operator==(Time &a,Time &b);

};

istream & operator>>(istream & Input,Time & t) //Overload " >> "

{

//Make sure hour,minute,second right.

Input>>t.hour>>t.minute>>t.second;

while(1)

{

if(t.hour>24||t.hour60||t.minute60||t.second

{

cout

Input>>t.hour>>t.minute>>t.second;

}

if(t.hour0&&t.minute0&&t.second0) break;

}

return Input;

}

ostream & operator

{

Output

return Output;

}

Time Time::operator+(int n) //Overload " + "

{

Time t;

t.hour=hour;

t.minute=minute+n;

t.second=second;

return t;

}

Time Time::operator-(int n)

{

Time t;

t.minute=minute-n;

t.hour=hour;

t.second=second;

return t;

}

Time Time::operator++()

{

Time t;

t.minute=minute;

t.second=second;

++hour;

t.hour=hour;

return t;

}

Time Time::operator--()

{

Time t;

t.minute=minute;

t.second=second;

--hour;

t.hour=hour;

return t;

}

int operator

{

if(a.hour

return 1; //Overload " - " //Overload " ++ " //Overload " -- " //Overload "

else if(a.hour==b.hour&&a.minute

return 1;

else if(a.hour==b.hour&&a.minute==b.minute&&a.second

return 1;

else

return 0;

}

int operator>(Time &a,Time &b) //Overload " > "

{

if(a.hour>b.hour)

return 1;

else if(a.hour==b.hour&&a.minute>b.minute)

return 1;

else if(a.hour==b.hour&&a.minute==b.minute&&a.second>b.second)

return 1;

else

return 0;

}

int operator==(Time &a,Time &b) //Overload " == "

{

if(a.hour!=b.hour)

return 0;

else

if(a.minute!=b.minute)

return 0;

else

if(a.second!=b.second)

return 0;

else return 1;

}

int main()

{

Time t,t0;

cout

cin>>t;

cout

cout

cout

cout

t=t+20;

cout

cout

t=t-10;

cout

cout

++t;

cout

cout

--t;

cout

cout

cin>>t0;

cout

cout

cout

if(t==t0)

cout

else

if(t>t0)

coutt0"

else

cout

return 0;

}

运行结果:

程序代码:/*5、编写一个程序,处理一个复数与一个double 型数相加的运算,结果存放在一个double 型的变量d1中,

输出d1的值,再以复数形式输出此值。定义复数(Complex )类,在成员函数中包含重载类型转换运算符:

Operator double(){ return real;}*/

#include

//using namespace std;

class Complex //Define class Complex

{

private:

double real,imag;

public:

double Complex::operator+(double a);

friend ostream & operator

friend istream & operator>>(istream & input,Complex & a);

Complex() //构造函数

{

real=10;

imag=10;

}

Complex(double a) //定义转换构造函数

{

real=a;imag=0;

}

};

double Complex::operator+(double a) // 重载类型转换符“+”

{

double b;

b=a+real;

return b;

}

ostream & operator

{

outputreturn output;

}

istream & operator>>(istream & input,Complex &a) //重载“ >>”

{

input>>a.real>>a.imag;

return input;

}

int main() // 主函数

{

Complex s;

double a,d1;

cout

cout>a):";

cin>>a;

d1=s+a;

cout

s=d1;

cout

return 0;

}

运行结果:

程序代码:/*6、定义一个教师类和一个学生类,二者有一部分数据成员是相同的,例如num ,name ,sex 。

请编程,将一个学生类对象转换为教师类,只将以上3个相同的数据成员移植过去。可以设想为:

一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,

应当保留并成为其教师的数据的一部分。*/

#include

#include

#include

using namespace std;

class Teacher;

class Student //定义学生类

{

private:

string num,name;

string sex;

public:

void Input();

void Display();

friend class Teacher;

friend Teacher Teacher::operator=(Student & s);

};

class Teacher //定义教师类

{

private:

string number,na;

string s;

public:

void Input();

void Display();

Teacher operator=(Student & s);

};

void Student::Input()

{

cout

cin>>num>>name>>sex;

}

void Student::Display()

{

cout

cout

void Teacher::Input()

{

cout>number>>na>>s;

}

void Teacher::Display()

{

cout

cout

Teacher Teacher::operator=(Student &s)

{

number=s.num;

na=s.name;

s=s.sex;

}

int main()

{

Student s;

Teacher t;

s.Input();

s.Display();

t=s;

t.Display();

return 0;

}

五. 实验总结


相关内容

  • 运算符重载实验报告
  • Guangxi University of Science and Technology 实验报告 实验课程: C++程序设计教程 实验内容: 运算符重载 院 (系): 专 业: 软件工程方向 班 级: 学生姓名: 学 号: 指导教师: 2013年 11 月 18日 一.实验目的: (1) 掌握运算 ...

  • 向量类实验报告
  • 目录 一. 需求分析 . .......................................................................................................................... 1 二.程序的主要功能 . ...

  • 程序设计语言-有理数运算程序
  • 有理数运算程序 一.题目 有理数运算程序.有理数是一个可以化为一个分数的数,例如2/3,533/920,-12/49都是有理数.在C++中,并没有预先定义有理数,该课程设计要求定义一个有理数类,将有理数的分子和分母分别存放在两个整型变量中,模拟进行针对有理数的各种操作. 二.问题的分析 针对有理数的 ...

  • 运算符重载题目
  • 二.运算符重载(运算符重载的基本概念.运算符重载方法.运算符重载规则.特殊运算符重载和类型转换) 单选题10道: 1.假定要对类AB 定义加号操作符重载成员函数,实现两个AB 类对象的加法,并返回相加结果,则该成员函数的声明语句为( B ). A. AB operator+(AB& a,AB ...

  • 构造函数的作用是在创建对象时
  • 第八章 一,构造函数的作用是在创建对象时,系统自动调用它来给所创建的对象初始化. 构造函数的特点: ● 构造函数是一种成员函数,他的说明在类体内,它的函数体可写在类体内,也可以 写在类体外. ● 构造函数是一种特殊的成员函数,该函数的名字与类名相同.定义和说明构造函数 时,不必指明函数的类型. ● ...

  • 南昌大学C++题库
  • 一.单项选择题 1. 在C++语言中,对函数参数默认值描述正确的是:( ) A) 函数参数的默认值只能设定一个 B) 一个函数的参数若有多个,则参数默认值的设定可以不连续 C) 函数参数必须设定默认值 D) 在设定了参数的默认值后,该参数后面定义的所有参数都必须设定默认值 2. 假定 AB 为一个类 ...

  • 用户在声明类时可以不定义构造函数
  • 用户在声明类时可以不定义构造函数,系统会自动设置一个默认的构造函数,在定义类对象时会自动调用这个默认的构造函数.这个构造函数实际上是一个空函数,不执行任何操作.如果需要对类中的数据成员初始化,应自己定义构造函数. 构造函数的主要作用是对数据成员初始化.在设计派生类的构造函数时,不仅要考虑派生类所增加 ...

  • C++模拟题2答案
  • C++程序设计模拟试卷(二) 一.单项选择题(本大题共20小题,每小题1分,共20分) 在每小题列出的四个备选项中 只有一个是符合题目要求的,请将其代码填写在题后的括号内.错选.多选或未选均无 分. 1. 静态成员函数没有() A. 返回值 B. this 指针 C. 指针参数 D. 返回类型 答案 ...

  • EDA技术与VHDL程序设计基础教程习题答案
  • EDA技术与VHDL程序设计基础教程习题答案 第1章 EDA习题答案 1.8.1填空 1.EDA的英文全称是2.EDA系统设计自动化EDA阶段三个发展阶段 3. EDA技术的应用可概括为 4.目前比较流行的主流厂家的EDA软件有Quartus II.ISE.ModelSim.ispLEVER 5.常 ...