C++实验报告之静态成员运算符重载.docx
《C++实验报告之静态成员运算符重载.docx》由会员分享,可在线阅读,更多相关《C++实验报告之静态成员运算符重载.docx(17页珍藏版)》请在冰豆网上搜索。
C++实验报告之静态成员运算符重载
题目1:
定义一个复数类,通过重载运算符:
*,/,直接实现二个复数之间的乘除运算。
编写一个完整的程序,测试重载运算符的正确性。
要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。
源程序1
/*******************第1题*******************/
/******************单森汉*****************/
/******************2012-5-1*****************/
#include
usingstd:
:
cout;
usingstd:
:
endl;
classComplex{
floatReal,Image;
public:
Complex(floatr=0,floati=0){Real=r;Image=i;}
voidShow()
{cout<<"Real="<friendComplexoperator*(Complex&,Complex&);
Complexoperator/(Complex&);//重载运算符+
Complexoperator+(Complex&);
friendComplexoperator-(Complex&,Complex&);
};
Complexoperator*(Complex&c1,Complex&c2)
{
Complext;
t.Real=c1.Real*c2.Real-c1.Image*c2.Image;
t.Image=c1.Image*c2.Real+c1.Real*c2.Image;
returnt;
}
ComplexComplex:
:
operator/(Complex&c)
{
Complext;
t.Real=(Real*c.Real+Image*c.Image)/(c.Real*c.Real+c.Image*c.Image);
t.Image=(Image*c.Real-Real*c.Image)/(c.Real*c.Real+c.Image*c.Image);
returnt;
}
ComplexComplex:
:
operator+(Complex&c)
{
Complext;
t.Real=Real+c.Real;
t.Image=Image+c.Image;
returnt;
}
Complexoperator-(Complex&c1,Complex&c2)
{
Complext;
t.Real=c1.Real-c2.Real;
t.Image=c1.Image-c2.Image;
returnt;
}
voidmain()
{Complexc1(1,2),c2(3,4),c3;
c3=c1*c2;
cout<<"两个复数的乘法c3=c1*c2:
";
c3.Show();
c3=c1/c2;
cout<<"两个复数的除法c3=c1/c2:
";
c3.Show();
Complexc4(1,2),c5(3,4),c6,c7(1,2),c8(3,0),c9;
c6=c4+c5;
cout<<"两个复数的加法c6=c4+c5:
";
c6.Show();
c6=c4-c5;
cout<<"两个复数的减法c6=c4-c5:
";
c6.Show();
c9=c7+c8;
cout<<"一个复数与一个实数的加法c9=c7+c8:
";
c9.Show();
c9=c7-c8;
cout<<"一个复数与一个实数的减法c9=c7-c8:
";
c9.Show();
}
运行结果截图
题目2:
定义一个向量(一维数组)类,通过重载运算符实现向量之间的加法和减法。
加法用成员函数重载,减法用友元函数重载。
源程序2
/*******************第2题*******************/
/******************单森汉*****************/
/******************2012-5-1*****************/
#include
usingstd:
:
cout;
usingstd:
:
endl;
classVect
{private:
float*p;
intn;
intx;
inty;
public:
Vect(intx1,inty1,intnum)
{
x=x1;
y=y1;
n=num;
}
Vect(){}
~Vect()
{}
public:
friendVect&operator-(Vect&a,Vect&b);
Vectoperator+(Vect&a)
{
if(a.n==n)
{
returnVect(a.x+x,a.y+y,n);
}
returna;
}
voidshow(){
cout<<"x="<}
};
Vect&operator-(Vect&a,Vect&b)
{
if(a.n==b.n)
{
returnVect(a.x-b.x,a.y-b.y,a.n);
}
returna;
}
intmain()
{
Vecta(4,2,6),b(3,7,6),c;
c=a-b;
c.show();
return0;
}
运行结果截图
题目3:
为数组类重载下标运算符“[]”、“+”加运算符和“=”赋值运算符。
源程序3
/*******************第3题*******************/
/******************单森汉*****************/
/******************2012-5-6*****************/
#include
usingnamespacestd;
classarray
{
int*a;
intlenth;
public:
array(intlenth=5)
{
a=newint[lenth];
this->lenth=lenth;
}
int&operator[](inti)
{
if(i=0)
returna[i];
elsecout<<"输入有误"<}
arrayoperator+(arrayb)
{
arrayc;
for(inti=0;ic.a[i]=a[i]+b[i];
returnc;
}
arrayoperator=(arrayb)
{
for(inti=0;ia[i]=b[i];
return*this;
}
voidshow()
{
for(inti=0;icout<cout<}
};
intmain()
{
arraya,b,c;
inti;
cout<<"输入数组a(5个元素):
"<for(i=0;i<5;i++)
cin>>a[i];
cout<<"输入数组b(5个元素):
"<for(i=0;i<5;i++)
cin>>b[i];
c=a+b;
a=b;
cout<<"数组a和数组b对应列相加后的新数组:
"<c.show();
return0;
}
运行结果截图
题目4:
编写程序,统计某旅馆住宿客人的总数。
要求输入客人的姓名,输出客人编号(按先后顺序自动生成)、姓名以及总人数。
总人数用静态成员。
其他的三个用普通的数据成员就好了。
源程序4
/*******************第4题*******************/
/******************单森汉*****************/
/******************2012-5-10*****************/
#include
usingnamespacestd;
classHotel{
private:
staticintm_TotalCustNum;
char*m_CustomerName;
intm_CustomerNum;//通过m_TotalCustNum来定义每个顾客的编号
public:
Hotel(char*a_Customer){
m_CustomerName=a_Customer;
m_TotalCustNum++;//增加顾客
m_CustomerNum=m_TotalCustNum;
}
//记得,m_TotalCustNum++和m_CustomerNum按照m_TotalCustNum来生成
~Hotel()
{
//deletem_CustomerName;
}
//记得m_CudeletestomerName
voidDisplay()
{
cout<<"姓名:
"<"<"<}
//相应输出客人姓名、编号和总人数
};
intHotel:
:
m_TotalCustNum=0;
intmain()
{
Hotela("张三"),b("李四"),c("王五"),d("赵六"),e("刘七");
a.Display();
b.Display();
c.Display();
d.Display();
e.Display();
return0;
}
运行结果截图
题目5:
读下列4个程序,给出80%的注释,调试并写出运行结果
源程序5
1)Sy3_1.cpp
#include//包含源文件iostream
usingnamespacestd;//使用命名空间
classMy//定义一个My类
{
public:
//定义My类的公共接口
My(intaa)//定义一个构造函数
{
A=aa;//把aa的值赋给A
B-=aa;//B-aa的结果赋给B
}
staticvoidfun(Mym);//声明静态函数fun
private:
//定义My类的私有数据
intA;//定义整型变量A
staticintB;//定义静态整型变量B
};
voidMy:
:
fun(Mym)//定义My类中空类型的fun函数
{
cout<<"A="<cout<<"B="<
}
intMy:
:
B=100;//设定B的值为100
intmain()//主函数
{
MyP(6),Q(8);//构造函数初始化列表
My:
:
fun(P);
Q.fun(Q);
return0;//函数执行完毕返回0值
}
2)Sy3_2.cpp
#include//包含源文件iostream
#include//包含源文件cmath
usingnamespacestd;//使用命名空间
classMy//定义一个My类
{
public:
//定义My类的公共接口
My(doublei=0){x=y=i;}//定义构造函数My
My(doublei,doublej){x=i;y=j;}//构造函数My重载
My(My&m){x=m.x;y=m.y;}//构造函数My重载
frienddoubledist(My&a,My&b);//声明友元函数dist
private:
//定义My类的私有数据
doublex,y;//定义两个双精度浮点型变量
};
doubledist(My&a,My&b)//定义dist函数
{
doubledx=a.x-b.x;//两点之间横坐标相减
doubledy=a.y-b.y;//两点之间纵坐标相减
returnsqrt(dx*dx+dy*dy);//返回两个点的距离值
}
intmain()//主函数
{
Mym1,m2(15),m3(13,14);//构造函数初始化列表
Mym4(m3);//构造函数初始化列表
cout<<"distance1:
"<cout<<"distance2:
"<cout<<"distance3:
"<cout<<"distance4:
"<return0;//函数执行完毕返回0值
}
3)Sy3_3.cpp
#include//包含源文件iostream
usingnamespacestd;//使用命名空间
classStudent//定义一个Student类
{
public:
//定义类的公共接口
voidscoretotalcount(floats);//声明函数
staticfloatsum();//声明一个静态单精度浮点型函数
staticfloataverage();//声明一个静态单精度浮点型函数
private:
//定义类的私有数据
staticfloattotal;//定义静态单精度浮点型变量total
staticfloatcount;//定义静态单精度浮点型变量count
floatscore;//定义单精度浮点型变量score
};
voidStudent:
:
scoretotalcount(floats)//定义类中scoretotalcount函数用来统计学生总分
{
score=s;//把s的值赋给score
count++;//人数自增
total+=score;//统计总分
}
floatStudent:
:
sum()//返回总分
{
returntotal;//返回总分的值
}
floatStudent:
:
average()//求学生平均分
{
returntotal/count;//返回总分除以总人数的值
}
floatStudent:
:
total=0;//使总分初始值为0
floatStudent:
:
count=0;//使总人数初始值为0
intmain()//主函数
{
Studentstud[20];//定义一个存放学生数据的一维数组
intn;//定义一个整型变量n
floats;//定义一个单精度浮点型变量s
cout<<"inputnumberofstudents:
";//提示输入学生人数
cin>>n;//输入学生人数
for(inti=0;i{
cout<<"inputscoreofNo."<
";//提示输入一个学生成绩
cin>>s;//输入一个学生成绩
stud[i].scoretotalcount(s);//统计总分
}
cout<<"totalscore:
"<:
sum()<cout<<"averagescore:
"<:
average()<return0;//函数执行完毕返回0值
}
4)
#include//包含iostream文件
#include//包含cstdio文件
usingnamespacestd;//使用命名空间
classRuler;
classBook//创建一个Book类
{
public:
//定义Book类的公共接口
Book(floatj){weight=j;}//定义构造函数Book
friendfloattotalWeight(Book&abook,Ruler&aruler);//声明友元函数
private:
//定义Book类的私有数据
floatweight;//定义一个单精度浮点型的变量weight
};
classRuler//创建一个Ruler类
{
public:
//定义Ruler类的公共接口
Ruler(floatj){weight=j;}//定义构造函数Ruler
friendfloattotalWeight(Book&abook,Ruler&aruler);//声明友元函数
private:
//定义Ruler类的私有数据
floatweight;//定义一个单精度浮点型的变量weight
};
floattotalWeight(Book&abook,Ruler&aruler)//定义友元函数totalWeight
{
returnabook.weight+aruler.weight;//返回书质量加上尺子质量的值
}
intmain()//主函数
{
floatw;//定义一个单精度浮点型的变量w
cout<<"inputweightofbook"<cin>>w;//输入书的质量
Bookb(w);//调用Book函数
cout<<"inputweightofruler"<cin>>w;//输入尺子的质量
Rulerr(w);//调用Ruler函数
cout<<"Totalweightofthebookandruleris"<cout<return0;//函数执行完毕返回0值
}
运行结果截图
1)
2)
3)
4)
仅供学习交流参考之用