您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> C十十 >> 辅导 >> 正文    
  C++习题与解析(重载-04) 【注册男护士专用博客】          

C++习题与解析(重载-04)

www.nanhushi.com     佚名   不详 

题6.设计一个三角形类Triangle,包含三角形三条边长的私有数据成员,另有一个重载运算符“+”,以实现求两个三角形对象的面积之和。 
解: 
在Triangle类中设计一个友元函数operator+(Triangle t1,Triangle t2),它重载运算符"+",返回t1和t2两个三角形的面积之和。 
本题程序如下: 
#include<iostream.h> 
#include<math.h> 
class Triangle 

int x,y,z; 
double area; 
public: 
Triangle(int i,int j,int k) 

double s; 
x=i;y=j;z=k; 
s=(x+y+z)/2.0; 
area=sqrt(s*(s-x)*(s-y)*(s-z)); 

void disparea() 

cout<<"Area="<<area<<endl; 

friend double operator+(Triangle t1,Triangle t2) 

return t1.area+t2.area; 

}; 
void main() 

Triangle t1(3,4,5),t2(4,5,6); 
double s; 
cout<<"t1:"; t1.disparea(); 
cout<<"t2:"; t2.disparea(); 
s=t1+t2; 
cout<<"总面积="<<s<<endl; 

本程序执行结果如下: 
t1:Area=6 
t2:Area=9.92157 
总面积=15.9216 


题7.习题6的重载运算符“+”友元函数只能返回两个三角形的面积之和,不能计算三个三角形的面积之和,改进一下,使之能计算任意多个三角形的面积之和。 
解: 
习题6的重载运算符为什么不能计算3个三角形的面积之和呢?对于式子:s=t1+t2+t3,先计算t1+t2,返回一个double数然后再进行该double数+t3的计算,显然没有这样的重载运算符“+”友元函数,只需要添加这样重载运算符“+”友元函数即可。 
本题程序如下: 
#include<iostream.h> 
#include<math.h> 
class Triangle 

int x,y,z; 
double area; 
public: 
Triangle(int i,int j,int k) 

double s; 
x=i;y=j;z=k; 
s=(x+y+z)/2.0; 
area=sqrt(s*(s-x)*(s-y)*(s-z)); 

void disparea() 

cout<<"Area="<<area<<endl; 

friend double operator+(Triangle t1,Triangle t2) 

return t1.area+t2.area; 

friend double operator+(double d,Triangle t) 

return d+t.area; 

}; 
void main() 

Triangle t1(3,4,5),t2(4,5,6),t3(5,6,7),t4(6,7,8); 
double s; 
cout<<"t1:"; t1.disparea(); 
cout<<"t2:"; t2.disparea(); 
cout<<"t3:"; t3.disparea(); 
cout<<"t4:"; t4.disparea(); 
s=t1+t2+t3+t4; 
cout<<"总面积="<<s<<endl; 

本程序的执行结果如下: 
t1:Area=6 
t2:Area=9.92157 
t3:Area=14.6969 
t4:Area=20.3332 
总面积=50.9517 



题8.设计一个学生类student,包括姓名和三门课程成绩,利用重载运算符”+“将所有学生的成绩相加放在一个对象中,再对该对象求各门课程的平均分。 
解: 
#include<iostream.h> 
#include<iomanip.h> 
#include<string.h> 
class student 

char name[10]; 
int deg1,deg2,deg3; 
public: 
student(){} 
student(char na[],int d1,int d2,int d3) 

strcpy(name,na); 
deg1=d1;deg2=d2;deg3=d3; 

friend student operator+(student s1,student s2) 

static student st; 
st.deg1=s1.deg1+s2.deg1; 
st.deg2=s1.deg2+s2.deg2; 
st.deg3=s1.deg3+s2.deg3; 
return st; 

void disp() 

cout<<setw(10)<<name<<setw(5)<<deg1<<setw(5)<<deg2<<setw(5)<<deg3<<endl; 

friend void avg(student &s,int n) 

cout<<setw(10)<<"平均分"<<setw(5)<<s.deg1/n<<setw(5)<<s.deg2/n<<setw(5)<<s.deg3/n<<endl; 

}; 
void main() 

student s1("Li",78,82,86),s2("Zheng",75,62,89); 
student s3("Ma",89,87,95),s4("Xu",54,78,66),s; 
cout<<"输出结果"<<endl; 
s1.disp(); 
s2.disp(); 
s3.disp(); 
s4.disp(); 
s=s1+s2+s3+s4; // 调用重载运算符 
avg(s,4); // 友元函数求平均分 

本程序的执行结果如下: 
输出结果: 
Li 78 82 86 
Zheng 75 62 89 
Ma 89 87 95 
Xu 54 78 66 
平均分 74 77 84 



题9.在Time类中设计如下重载运算符函数: 
Time operator+(Time); 返回一时间加上另一时间得到的新时间 
Time operator-(Time); 返回一时间减去另一时间得到的新时间 
本题程序如下: 
#include<iostream.h> 
class Time 

int hour,minute,second; 
public: 
Time(){} 
Time(int h,int m,int s) 

hour=h;minute=m;second=s; 

Time(int h,int m) 

hour=h;minute=m;second=0; 

void sethour(int h){hour=h;} 
void setminute(int m){minute=m;} 
void setsecond(int s){second=s;} 
int gethour(){return hour;} 
int getminute(){return minute;} 
int getsecond(){return second;} 
Time operator+(Time); 
Time operator-(Time); 
void disp() 

cout<<hour<<":"<<minute<<":"<<second<<endl; 

}; 
Time Time::operator+(Time t) 

int carry,hh,mm,ss; 
ss=getsecond()+t.getsecond(); 
if(ss>60) 

ss-=60; 
carry=1; // 进位标记 

else carry=0; 
mm=getminute()+t.getminute()+carry; 
if(mm>60) 

mm-=60; 
carry=1; 

else carry=0; 
hh=gethour()+t.gethour()+carry; 
if(hh>24) 
hh=24; 
static Time result(hh,mm,ss); 
return result; 

Time Time::operator-(Time t) 

int borrow,hh,mm,ss; 
ss=getsecond()-t.getsecond(); 
if(ss<0) 

ss+=60; 
borrow=1; // 借位标记 

else borrow=1; 
mm=getminute()-t.getminute()-borrow; 
if(mm<0) 

mm+=60; 
borrow=1; 

else borrow=0; 
hh=gethour()-t.gethour()-borrow; 
if(hh<0) 
hh+=24; 
static Time result(hh,mm,ss); 
return result; 

void main() 

Time now(2,24,39); 
Time start(17,55); 
Time t1=now-start,t2=now+start; 
cout<<"输出结果:"<<endl; 
cout<<" now: "; now.disp(); 
cout<<" start:"; start.disp(); 
cout<<" 相差: "; t1.disp(); 
cout<<" 相加: "; t2.disp(); 

本程序的执行结果如下: 
输出结果: 
now:2:24:39 
start:17:55:0 
相差:8:28:39 
相加:20:19:39 

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。