24 运算符重载 第二章 C++面向对象程序设计.docx

上传人:b****3 文档编号:3856642 上传时间:2022-11-25 格式:DOCX 页数:12 大小:16.55KB
下载 相关 举报
24 运算符重载 第二章 C++面向对象程序设计.docx_第1页
第1页 / 共12页
24 运算符重载 第二章 C++面向对象程序设计.docx_第2页
第2页 / 共12页
24 运算符重载 第二章 C++面向对象程序设计.docx_第3页
第3页 / 共12页
24 运算符重载 第二章 C++面向对象程序设计.docx_第4页
第4页 / 共12页
24 运算符重载 第二章 C++面向对象程序设计.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

24 运算符重载 第二章 C++面向对象程序设计.docx

《24 运算符重载 第二章 C++面向对象程序设计.docx》由会员分享,可在线阅读,更多相关《24 运算符重载 第二章 C++面向对象程序设计.docx(12页珍藏版)》请在冰豆网上搜索。

24 运算符重载 第二章 C++面向对象程序设计.docx

24运算符重载第二章C++面向对象程序设计

34、运算符重载的含义是什么?

是否所有的运算符都可以重载?

答:

运算符重载是对已有的运算符赋予多重含义,同一个运算符作用于不用类型的数据导致不同行为。

不是。

在C++语言中除了(点运算符(.)、作用域运算符(:

)、条件运算符(?

)、成员指针运算符(*)、编译预处理命令的开始符号(#))五个运算符不能被重载外,其他运算符均可重载。

35、运算符重载有哪两种形式?

这两种形式有何区别?

答:

运算符重载有成员函数和友元函数两种形式。

区别:

运算符作为成员函数重载时的参数比作为友元函数重载时少一个。

例如使用成员函数重载双目运算符时只用一个参数,而使用友元函数重载时要用两个参数。

36、转换函数的作用是什么?

答:

1、支持混合类型表达式

2、转换减少所需操作符的数目

37、分析下列程序的结果。

#include

classCMatrix

{

public:

cMatrix(intr,intc)

{

row=r;col=c;

element=newdouble[row*col];

}

double&operator()(intx,inty)

{returnelement[col*(x-1)+y-1];}

double&operator()(intx,inty)const

{returnelement[col*(x-1)+y-1];}

~CMatrix(){delete[]element;}

private:

double*element;

introw,col;

};

voidmain()

{

CMatrixm(5,8);

for(inti=;i<5;i++)

m(i,1)=i+5;

for(i=0;i<5;i++)

cout<

cout<

}

运行结果:

5,6,7,8,9,

38、定义一个复数类,通过重载运算符:

=、+=、+、-、*、/,直接实现两个复数之间的各种运算。

编写一个完整的程序(包括测试各种运算符的程序部分)。

提示:

两复数相乘的计算公式为:

(a+bi)*(c+di)=(ac-bd)+(ab+bc)I,而两复数相除的计算公式为:

(a+bi)/(c+di)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d)i。

#include

usingnamespacestd;

classcomplex

{

public:

complex(inti=0,intj=0):

real(i),image(j)

{}

complex(constcomplex&a):

real(a.real),image(a.image)

{

}

complex&operator=(constcomplex&a)

{

real=a.real;

image=a.image;

return*this;

}

complex&operator+=(constcomplex&a)

{

real=real+a.real;

image=image+a.image;

return*this;

}

voiddisplay()

{

cout<<"("<

}

friendcomplexoperator+(constcomplex&,constcomplex&);

friendcomplexoperator-(constcomplex&,constcomplex&);

friendcomplexoperator*(constcomplex&,constcomplex&);

friendcomplexoperator/(constcomplex&,constcomplex&);

private:

intreal;

intimage;

};

complexoperator+(constcomplex&a,constcomplex&b)

{

complexr(a);

r.real+=b.real;

r.image+=b.image;

returnr;

}

complexoperator-(constcomplex&a,constcomplex&b)

{

complexr;

r.real=r.real-b.real;

r.image=r.image-b.image;

returnr;

}

complexoperator*(constcomplex&c1,constcomplex&c2)

{

complext;

t.real=c1.real*c2.real-c1.image*c2.image;

t.image=c1.image*c2.real+c1.real*c2.image;

returnt;

}

complexoperator/(constcomplex&c1,constcomplex&c2)

{

complext;

t.real=(c1.real*c2.real+c1.image*c2.image)/(c2.real*c2.real+c2.image*c2.image);

t.image=(c2.image*c2.real-c1.real*c2.image)/(c2.real*c2.real+c2.image*c2.image);

returnt;

}

intmain()

{

complexa(32,6);

complexb(23,63);

complexc;

c=a+b;

c.display();

a+=b;

a.display();

c=a-b;

c.display();

c=a*b;

c.display();

c=a/b;

c.display();

return0;

}

39、定义一个学生类,数据成员包括:

姓名、学号、C++、英语和数学成绩。

重载运算符“<<”和“>>”,实现学生对象的直接输入输出。

增加转换函数,实现姓名的转换。

设计一个完整的程序,验证成员函数和重载运算符的正确性。

#include

usingnamespacestd;

classstudent

{

public:

student(char*n=""):

number("201"),cpp(0.0),eng(0.0),math(0.0){}

voidset(char*nm,char*num,float_cpp,floatma,float_eng)

{

name=nm;

mumber=num;

cpp=_cpp;

math=ma;

eng=_eng;

}

friendostream&operator<<(ostream&out,conststudent&a);

friendistream&operator>>(ostream&in,student&b);

private:

charname[20];

charnumber[20];

floatcpp;

floatmath;

floateng;

};

ostream&operator<<(ostream&out,conststudent&a)

{

out<

<

<

<

<

returnout;

}

istream&operator>>(ostream&in,student&b)

{

in>>a.name>>a.number

>>a.cpp>>a.math

>>a.eng;

}

intmain()

{

studenta;

a.set("linda","201",34,64,64);

cout<

studentb;

cin>>b;

cout<

}

40、定义一个平面直角坐标系上的一个点的类CPoint,重载“++”和“--”运算符,并区分这两种运算符的前置和后置运算,构造一个完整的程序。

#include

usingnamespacestd;

classCPoint

{

public:

CPoint(inti=0,intj=0):

x(i),y(j){}

CPoint&operator++();//前置

CPointoperator++(int);//后置

CPoint&operator--();//前置

CPointoperator--(int);//后置

voiddisplay();

private:

intx;

inty;

};

CPoint&CPoint:

:

operator++()

{

++x;

++y;

return*this;

}

CPoint&CPoint:

:

operator--()

{

--x;

--y;

return*this;

}

CPointCPoint:

:

operator++(int)

{

CPointret(*this);

++x;

++y;

returnret;

}

CPointCPoint:

:

operator--(int)

{

CPointret(*this);

--x;

--y;

returnret;

}

voidCPoint:

:

display()

{

cout<

}

intmain()

{

CPointdot1(2,5);

++dot1;

dot1.display();

CPointdot2(1,2);

--dot2;

dot2.display();

CPointdot3(2,2);

dot3++;

dot3.display();

return0;

}

41、在上题的基础上,为其定义友元函数实现重载运算符“+”。

#include

usingnamespacestd;

classCPoint

{

public:

CPoint(inti=0,intj=0):

x(i),y(j){}

CPoint&operator++();//前置

CPointoperator++(int);//后置

CPoint&operator--();//前置

CPointoperator--(int);//后置

voiddisplay();

friendCPointoperator+(constCPoint&a,constCPoint&b);

private:

intx;

inty;

};

CPoint&CPoint:

:

operator++()

{

++x;

++y;

return*this;

}

CPoint&CPoint:

:

operator--()

{

--x;

--y;

return*this;

}

CPointCPoint:

:

operator++(int)

{

CPointret(*this);

++x;

++y;

returnret;

}

CPointCPoint:

:

operator--(int)

{

CPointret(*this);

--x;

--y;

returnret;

}

voidCPoint:

:

display()

{

cout<

}

CPointoperator+(constCPoint&a,constCPoint&b)

{

CPointt(a);

t.x+=b.x;

t.y+=b.y;

returnt;

}

intmain()

{

CPointdot1(2,5);

++dot1;

dot1.display();

CPointdot2(1,2);

--dot2;

dot2.display();

CPointdot3(2,2);

dot3++;

dot3.display();

CPointdot4;

dot4=dot1+dot2;

dot4.display();

return0;

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1