C++面向对象程序设计的大作业计算两点之间的距离.docx

上传人:b****9 文档编号:26055143 上传时间:2023-06-17 格式:DOCX 页数:15 大小:97.66KB
下载 相关 举报
C++面向对象程序设计的大作业计算两点之间的距离.docx_第1页
第1页 / 共15页
C++面向对象程序设计的大作业计算两点之间的距离.docx_第2页
第2页 / 共15页
C++面向对象程序设计的大作业计算两点之间的距离.docx_第3页
第3页 / 共15页
C++面向对象程序设计的大作业计算两点之间的距离.docx_第4页
第4页 / 共15页
C++面向对象程序设计的大作业计算两点之间的距离.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C++面向对象程序设计的大作业计算两点之间的距离.docx

《C++面向对象程序设计的大作业计算两点之间的距离.docx》由会员分享,可在线阅读,更多相关《C++面向对象程序设计的大作业计算两点之间的距离.docx(15页珍藏版)》请在冰豆网上搜索。

C++面向对象程序设计的大作业计算两点之间的距离.docx

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

总分

                 

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

当前位置:首页 > 医药卫生 > 临床医学

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

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