C++面向对象程序设计的大作业计算两点之间的距离.docx
- 文档编号:13567427
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:15
- 大小:97.66KB
C++面向对象程序设计的大作业计算两点之间的距离.docx
《C++面向对象程序设计的大作业计算两点之间的距离.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计的大作业计算两点之间的距离.docx(15页珍藏版)》请在冰点文库上搜索。
C++面向对象程序设计的大作业计算两点之间的距离
武汉轻工大学
面向对象程序设计期末大作业
专业:
电子信息科学与技术
班级:
电信产业1301班
学号:
1304100025
姓名:
肖梦
1目的与要求
学生能够比较熟练地掌握C++语言的基本语法规则;熟练掌握基本的面向对象的程序设计方法,如类的实现、创建类的实例—对象、实现类的继承等;掌握各种面向对象的程序设计技术,如继承和派生,虚继承、虚函数、抽象类、多态的实现等。
掌握在VC++平台上进行程序设计和调试的方法。
学生利用学到的面向对象的基本原理和C++语言语法以及编程技巧,通过灵活应用VisualC++6.0集成开发环境进行应用程序和系统的开发设计,掌握可视化程序设计的基本方法和步骤,强化巩固已有编程知识,训练新的设计与编程思路,帮助熟悉程序编写,及时查究错误。
要求学生独立完成完整的用C++语言编写的应用程序,以全面掌握C++面向对象程序设计的基础知识。
2设计内容
2.1计算两点之间的距离
用类实现计算两点之间的距离。
(可以定义点类(Point),再定义一个类(Distance)描述两点之间的距离,其数据成员为两个点类对象,两点之间距离的计算可设计由构造函数来实现。
)
2.1.1程序设计方案和原理
根据题目要求本题可以用类的组合来实现。
我们可以用一个point类来描述平面上点的的坐标,然后为Distance类添加一个Point类的对象作为其数据成员,用来计算两个点之间的距离。
ycord
2.1.2程序的代码实现
#include
#include
classPoint//定义Point类
{
public:
Point(inta=0,intb=0)
{
x=a;
y=b;
}
intxcord()
{
returnx;
}
intycord()
{
returny;
}
private:
intx,y;
};
classDistance//定义Distance类作为容器类
{
public:
Distance(Pointq1,Pointq2);
floatgetdist()
{
returndist;
}
private:
Pointp1,p2;//p1,p2是类嵌对象
floatdist;
};
Distance:
:
Distance(Pointq1,Pointq2):
p1(q1),p2(q2)/*Distance类的构造函数通过初始化列表向
类嵌对象的构造函数赋值*/
{
floatx=float(p1.xcord()-p2.xcord());
floaty=float(p1.ycord()-p2.ycord());
dist=sqrt(x*x+y*y);//两点间距离
}
voidmain()
{
Pointp(0,0),q(1,1);//创建Point类对象
Distancedis(p,q);//创建Distance类对象
cout<<"Thedistanceis:
"< } Distance类为容器类,包含Point类的内嵌对象q1和q2,Distance类的构造函数通过初始化列表向Point类的构造函数传递参数。 2.1.3程序运行效果 程序对(0,0)、(1,1)两点间的距离进行计算,结果为1.41421. 2.2类的应用 一圆型游泳池如图所示,现在需在其周围建一圆型过道,并在其四周围上栅栏。 栅栏价格为35元/米,过道造价为20元/平方米。 过道宽度为3米,游泳池半径由键盘输入。 要求编程计算并输出过道和栅栏的造价。 2.2.1程序设计方案和原理 先定义PI、栅栏和过道造价等常量,创建一个Circle类,通过类的面积和周长的成员函求出过道的面积和周长,最后乘以造价得到所需的造价。 2.2.2程序的代码实现 #include usingnamespacestd; constfloatPI=3.14159; constfloatFencePrice=35; constfloatConcretePrice=20; //声明类Circle及其数据成员和成员函数 classCircle { private: floatradius; public: Circle(floatr);//声明带参构造函数 floatCircumference()const;//圆周长 floatArea()const;//圆面积 }; //构造函数初始化数据成员radius Circle: : Circle(floatr) {radius=r;} //计算圆的周长 floatCircle: : Circumference()const { return2*PI*radius; } //计算圆的面积 floatCircle: : Area()const { returnPI*radius*radius; } voidmain() { floatradius; floatFenceCost,ConcreteCost; cout<<"Entertheradiusofthepool: "; cin>>radius; //声明Circle对象 CirclePool(radius); CirclePoolRim(radius+3); //计算栅栏造价并输出 FenceCost=PoolRim.Circumference()*FencePrice; cout<<"FencingCostis¥"< //计算过道造价并输出 ConcreteCost=(PoolRim.Area()-Pool.Area())*ConcretePrice; cout<<"ConcreteCostis¥"< } 利用类中的Circumference()成员函数来计算周长,用PoolRim.Area()-Pool.Area()来计算过道的面积,再算出造价。 2.2.3程序运行效果 输入池子的半径为10米,得出栅栏和过道造价分别为2858.85和4335.39。 2.3虚基类应用 设计一个虚基类Person,包含姓名和年龄私有数据成员以及相关的成员函数;由它派生出领导类Leader,包含职务和部门私有数据成员以及相关的成员函数;再由Person派生出工程师类Engineer,包含职务和专业私有数据成员以及相关的成员函数;再由Leader和Engineer类派生出主任工程师类Chairman。 并采用相关数据进行测试。 2.3.1程序设计方案和原理 2.3.2程序的代码实现 #include #include classPerson { private: charname[20]; intage; public: Person(char*n,inta);//声明带参的构造函数 char*getname(); intgetage(); }; classLeader: virtualpublicPerson//Person是虚基类 { private: charjob[20]; chardep[20]; public: Leader(char*jb,char*dp); char*getjob(); char*getdep(); }; classEngineer: virtualpublicPerson//Person是虚基类 { private: charmajor[20]; charprof[20]; public: Engineer(char*maj,char*pf); char*getprof(); char*getmajor(); }; classChairman: publicLeader,publicEngineer//Chairman是虚基类Person的间接派生类 { public: Chairman(char*n,inta,char*job,char*dp,char*maj,char*pf); voiddisp(); }; Person: : Person(char*n,inta) { strcpy(name,n); age=a; } char*Person: : getname() { returnname; } intPerson: : getage() { returnage; } Leader: : Leader(char*jb,char*dp): Person("",20) { strcpy(job,jb); strcpy(dep,dp); } char*Leader: : getjob() { returnjob; } char*Leader: : getdep() { returndep; } Engineer: : Engineer(char*maj,char*pf): Person("",30) { strcpy(major,maj); strcpy(prof,pf); } char*Engineer: : getmajor() { returnmajor; } char*Engineer: : getprof() { returnprof; } Chairman: : Chairman(char*n,inta,char*jb,char*dp,char*maj,char*pf): Person(n,a),Leader(jb,dp),Engineer(maj,pf) {} voidChairman: : disp() { cout<<"姓名: "< "< "< "< "< "< } voidmain() { cout<<"请分别输入: "<<"姓名: "<<'\t'<<"年龄: "<<'\t'<<"职务: "<<'\t'<<"部门: "<<'\t'<<"专业: "<<'\t'<<"职称: "< charname[20]; intage; charjob[20]; chardep[20]; charmajor[20]; charprof[20]; cin>>name; cin>>age; cin>>job; cin>>dep; cin>>major; cin>>prof; Chairmanc(name,age,job,dep,major,prof); c.disp(); } 2.3.3程序运行效果 3总结 1.在计算两点间的距离时,直接开方和乘方时出错。 解决方法: 加上math头文件。 2.在对类的继承相关程序进行编程时,感觉类之间的关系非常混乱。 解决方法: 先在构思出大致的框架,理清类与类之间的关系,再进行编程。 3.在对用户自己输入信息这部分进行编程时,如果全部用指针和数组来实现,程序会变得比较复杂。 解决方法: 利用string头文件里面的strcpy等函数来实现,使程序更加简洁。 通过本次大作业,使我对c++编程有了更深的了解,它具有更好的模块化,更高级的抽象性,更好的代码可重用性,巩固了我对OOP的掌握和对类等知识点的掌握。 今后还需要更多的练习,才能更好的使用c++这一语言来解决问题。 《面向对象程序设计》期末大作业评分表 学生姓名 肖梦 班级 电产1301 学号 1304100025 评分项目 评分档次及分值 评分 分值 A B C D E 基础知识 10 10 9 8 7 <6 实践操作 10 10 9 8 7 <6 分析与设计 30 30 27 24 21 <18 代码质量 30 30 27 24 21 <18 答辩水平 10 10 9 8 7 <6 文档撰写 10 10 9 8 7 <6 总分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 面向 对象 程序设计 作业 计算 两点 之间 距离