24 运算符重载 第二章 C++面向对象程序设计Word格式文档下载.docx
《24 运算符重载 第二章 C++面向对象程序设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《24 运算符重载 第二章 C++面向对象程序设计Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
{
public:
cMatrix(intr,intc)
{
row=r;
col=c;
element=newdouble[row*col];
}
double&
operator()(intx,inty)
{returnelement[col*(x-1)+y-1];
operator()(intx,inty)const
~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;
cout<
<
m(i,1)<
”,”;
endl;
运行结果:
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<
iostream>
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;
operator+=(constcomplex&
real=real+a.real;
image=image+a.image;
voiddisplay()
cout<
"
("
<
real<
"
image<
)"
endl;
friendcomplexoperator+(constcomplex&
constcomplex&
);
friendcomplexoperator-(constcomplex&
friendcomplexoperator*(constcomplex&
friendcomplexoperator/(constcomplex&
private:
intreal;
intimage;
complexoperator+(constcomplex&
a,constcomplex&
b)
complexr(a);
r.real+=b.real;
r.image+=b.image;
returnr;
complexoperator-(constcomplex&
complexr;
r.real=r.real-b.real;
r.image=r.image-b.image;
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&
c2)
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);
intmain()
complexa(32,6);
complexb(23,63);
complexc;
c=a+b;
c.display();
a+=b;
a.display();
c=a-b;
c=a*b;
c=a/b;
return0;
39、定义一个学生类,数据成员包括:
姓名、学号、C++、英语和数学成绩。
重载运算符“<
”和“>
>
”,实现学生对象的直接输入输出。
增加转换函数,实现姓名的转换。
设计一个完整的程序,验证成员函数和重载运算符的正确性。
classstudent
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>
in,student&
b);
charname[20];
charnumber[20];
floatcpp;
floatmath;
floateng;
ostream&
out<
a.name<
a.number<
a.cpp<
a.math<
a.eng<
;
returnout;
istream&
in>
a.name>
a.number
>
a.cpp>
a.math
a.eng;
studenta;
a.set("
linda"
34,64,64);
a;
studentb;
cin>
b;
40、定义一个平面直角坐标系上的一个点的类CPoint,重载“++”和“--”运算符,并区分这两种运算符的前置和后置运算,构造一个完整的程序。
classCPoint
CPoint(inti=0,intj=0):
x(i),y(j){}
CPoint&
operator++();
//前置
CPointoperator++(int);
//后置
operator--();
CPointoperator--(int);
voiddisplay();
intx;
inty;
CPoint&
CPoint:
:
operator++()
++x;
++y;
operator--()
--x;
--y;
CPointCPoint:
operator++(int)
CPointret(*this);
returnret;
operator--(int)
voidCPoint:
display()
x<
y<
CPointdot1(2,5);
++dot1;
dot1.display();
CPointdot2(1,2);
--dot2;
dot2.display();
CPointdot3(2,2);
dot3++;
dot3.display();
41、在上题的基础上,为其定义友元函数实现重载运算符“+”。
friendCPointoperator+(constCPoint&
a,constCPoint&
CPointoperator+(constCPoint&
CPointt(a);
t.x+=b.x;
t.y+=b.y;
CPointdot4;
dot4=dot1+dot2;
dot4.display();