面向对象程序设计课程设计.docx
- 文档编号:11090703
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:72
- 大小:239.26KB
面向对象程序设计课程设计.docx
《面向对象程序设计课程设计.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计课程设计.docx(72页珍藏版)》请在冰点文库上搜索。
面向对象程序设计课程设计
课程设计报告
课程设计题目:
面向对象程序设计
学生姓名
专业:
软件工程
班级:
指导教师:
2017年6月16日
课程设计目的:
综合运用所学过的知识进行实际程序设计。
课程设计内容:
Part11:
类的组合:
定义point类,数据成员包括x,y,成员函数包括构造函数,拷贝构造函数和析构函数,以及setx,getx,sety,gety四个属性函数。
定义line类,端点由两个point类的对象组成,包括构造函数,析构函数以及计算线段长度的函数getlength。
在main函数中,定义line的对象,并输出其长度。
#include
#include
usingnamespacestd;
classpoint
{
private:
doublex,y;
public:
point(){}
point(doublex,doubley):
x(x),y(y)
{}
voidsetx(doublexx)
{
x=xx;
}
doublegetx(){returnx;}
voidsety(doubleyy)
{
y=yy;
}
doublegety(){returny;}
point(point&p)
{
x=p.x;
y=p.y;
}
~point(){}
};
classline
{
private:
pointa,b;
public:
line(pointaa,pointbb):
a(aa),b(bb)
{}
doublegetlength()
{
doublelength;
length=sqrt(pow((a.getx()-b.getx()),2)+pow((a.gety()-b.gety()),2));
returnlength;
}
~line(){}
};
voidmain()
{
pointp1(2,3);
pointp2(5,6);
linel1(p1,p2);
cout<<"Thelengthofthelineis"< }Part11运行结果与分析: 运行结果: 输入x1,y1,x2,y2: 2356 p1: (2,3) p2: (5,6) Part11设计过程、思路与分析: 1.定义Point类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及setx,getx,sety,gety四个属性函数; 2.定义line类,设置其成员函数和getlength()函数。 Getlength()函数可以输入和输出两点的坐标和两点之间的距离; 3.在主函数中定义类line对象myline。 调用getlength()函数实现目的。 Part12: 对象数组和函数: 定义student类,数据成员包括姓名name和成绩score,成员函数包括构造函数,拷贝构造函数和析构函数。 定义函数voidhighestscore(students[]),输出分数最高的学生姓名和分数。 在main函数中定义students[N],调用highestscore函数,输出分数最高的学生姓名和分数。 #include #include constintN=3;//定义要输入的学生数 usingnamespacestd; classstudent//定义student类 { private: stringname; doublescore; public: student(){}//定义无参构造函数 student(stringn,doubles): name(n),score(s)//定义有参构造函数 {} student(student&s)//拷贝构造函数 { name=s.name; score=s.score; } voidhighestscore(students[]) { intk=0; doublemax; max=s[0].score; for(inti=1;i { if(max { max=s[i].score; k=i; } } cout<<"Thestudent'sname: "< cout<<"Highestscoreis: "< } ~student(){} friendostream&operator<<(ostream&os,students) { os< returnos; } friendistream&operator>>(istream&is,student&s) { is>>s.name>>s.score; returnis; } }; voidmain() { students[N]; for(inti=0;i { cin>>s[i]; } s[N].highestscore(s); } Part12运行结果与分析: 运行结果: 运行结果分析: 输入的3位同学,成绩最高的是lisi97,输出结果正确。 Part12设计过程、思路与分析: 定义student类,设置其成员函数(构造函数,拷贝构造函数和析构函数)和获取名字的函数getname()、获取成绩的函数getscore(); 定义highestscore(students[])函数。 该函数中用k记录成绩最高的数组。 并且输出其姓名和成绩的信息; 主函数中定义对象数组s[N],用for循环输入3个学生的姓名和学号,再调用higtestscore(students[])函数输出成绩最高的学生的信息。 Part13: 静态数据成员: 设计一个书类,能够保存书名、定价,所有书的本数和总价。 (将书名和定价设计为普通数据成员;将书的本数和总价设计为静态数据成员) #include #include usingnamespacestd; classBook { private: stringname; doubleprice; staticintnum; staticdoubletotal; public: Book(){} Book(stringname,doubleprice); ~Book(){} Book(Book&con_refbook); stringget_name(); doubleget_price(); staticintget_num(); staticdoubleget_total(); voidshow(); voidput(); }; Book: : Book(stringname,doubleprice): name(name),price(price) { num++; total+=price; } intBook: : num=0; intBook: : get_num() { returnnum; } doubleBook: : total=0; doubleBook: : get_total() { returntotal; } voidBook: : show() { cout<<"Bookinformation: "< cout<<"name: "< "< } voidBook: : put() { cout<<"Booktotal: "< cout<<"pricetotal: "< } intmain() { Bookbook1("Helloworld",16.5); Bookbook2("C++prime",20.5); Bookbook3("C++program",30.0); book1.show(); book2.show(); book3.show(); book3.put(); system("pause"); return0; } Part13运行结果与分析: 运行结果: 运行结果分析: 一共输入三本书的书名和价格,输出的Booktotal为3,pricetotal为67,输出结果正确。 Part13设计过程、思路与分析: 1.定义Book类,设置其成员函数(构造函数,拷贝构造函数和析构函数) 获取书名函数get_name()、获取价格函数get_price(),访问静态数据num的成员函数get_num()、访问静态数据total的成员函数get_total(),显示书名及价格的函数show()、显示总价的函数put(); 2.在主函数中定义Book类的三个对象book1、book2、book3,并且都初始化; 3.三个对象同时调用show()函数,显示信息。 最后调用put()函数显示书、 的总数和总价格。 ===================================================================== Part14: 动态内存分配: 定义point类,数据成员包括x,y,成员函数包括构造函数,拷贝构造函数和析构函数,以及setx,getx,sety,gety四个属性函数。 在main函数中,用new和delete分配和释放N个point的数组。 (N是const常量,N=10) #include constintN=10; usingnamespacestd; classPoint { private: floatx,y; public: Point(){} ~Point(){} Point(floatx,floaty): x(x),y(y){} Point(Point&con_refpoint) { x=con_refpoint.x; y=con_refpoint.y; } voidsetx(floatxx) { x=xx; } voidsety(floatyy) { y=yy; } floatgetx(){returnx;} floatgety(){returny;} }; intmain() { Point*p=newPoint[N]; delete[]p; system("pause"); return0; } Part14运行结果与分析: 运行结果分析: 程序主函数中位Point[N]数组申请了一段内存空间,并定义指针p指向该对象,然后用delete直接作用于指针,删除new创建的对象,释放指针p所指向的内存空间。 Part14设计过程、思路与分析: 1.定义Point类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及setx()、sety()、getx()、gety()属性函数; 2.在主函数中用new来为Point对象数组申请一块连续的内存,然后用delete直接作用于指针,删除new创建的对象,释放指针p所指向的内存空间。 ===================================================================== Part15: 类的继承: 定义一个point类,包含私有数据成员x,y,成员函数包括无参构造函数,带参构造函数,set和get属性函数。 定义circle类,从point类公有派生,增加数据成员半径r,成员函数包括无参构造函数,带参构造函数,计算面积函数getarea。 在main函数中定义一个circle的对象,并计算其面积。 #include usingnamespacestd; classpoint { public: point(){} point(intx,inty) { } voidset_x(intx) { this->x=x; } intget_x() { returnx; } voidset_y(inty) { this->y=y; } intget_y() { returny; } private: intx; inty; }; classcircle: publicpoint { public: circle(){} circle(intr,intx,inty): point(x,y) { this->r=r; } intget_r() { returnr; } doublegetarea() { return(3.14*r*r); } private: intr; }; intmain() { circlec1(2,3,2); cout<<"r="< cout<<"thecircle'sarea="< system("pause"); return0; } Part15运行结果与分析: 运行结果分析: 在主函数中初始化圆的半径r=2,输出结果area=12.56输出结果正确。 Part15设计过程、思路与分析: 1.定义Point类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及setx()sety()getx()gety()四个属性函数。 2.定义circle类,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及获取半径r的函数get_r()计算面积并获取面积的函数getarea()。 3.在主函数中定义类的对象c1并初始化r=2。 再调用getarea()函数输出面积 ===================================================================== Part16: 虚基类: 定义vehicle类,数据成员包括私有的weight,公有的构造函数,析构函数和输出函数dispaly;从vehicle类公有派生car类,增加数据成员载人数personnum,公有的构造函数,析构函数和输出display;从vehicle类公有派生truck类,增加数据成员载货量laod,公有的构造函数,析构函数和输出函数display;从car类和truck类共同公有派生出pickup类,包括公有的构造函数和输出函数。 在main函数中,定义pickup类对象,并输出其基本信息。 #include usingnamespacestd; classvehicle { public: vehicle(){} vehicle(intweight) { this->weight=weight; } ~vehicle() { cout<<"vehicleconstructoring! "< } voiddisplay() { cout<<"theweightofvehicleis"< } private: intweight; }; classcar: virtualpublicvehicle { public: car(){} car(intpersonnum,intweight): vehicle(weight) { this->personnum=personnum; } ~car() { cout<<"carconstructoring! "< } virtualvoiddisplay() { cout<<"Thenumberofpersonis"< } private: intpersonnum; }; classtruck: virtualpublicvehicle { public: truck(){} truck(intload,intweight): vehicle(weight) { this->load=load; } ~truck() { cout<<"truckconstructoring! "< } virtualvoiddisplay() { cout<<"Theloadofthetruckis: "< } private: intload; }; classpickup: publiccar,publictruck { public: pickup(){} pickup(intweight1,intweight2,intpersonnum,intload,intweight): car(personnum,weight1),truck(load,weight2),vehicle(weight) { cout<<"pickupconstructoring! "< } virtualvoiddisplay() { vehicle: : display(); vehicle: : ~vehicle(); car: : display(); car: : ~car(); truck: : display(); truck: : ~truck(); } }; intmain() { pickupp1(10,10,20,30,10); p1.display(); system("pause"); return0; } Part16运行结果与分析: 运行结果: 运行结果分析: 在主函数中定义pickup类的对象p,并对其初始化。 在主函数中调用pickup类中的show()函数。 输出结果正确。 Part16设计过程、思路与分析: 1.定义vehicle类,私有成员数据weight,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及display()属性函数。 2.定义car类继承自虚基类vehicle,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及display()属性函数。 3.定义truck类继承自虚基类vehicle,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及display()属性函数。 4.定义类pickup继承类car和类truck,设置其成员函数(构造函数,拷贝构造函数和析构函数)以及show()属性函数,在show()函数中调用类vehicle、类car、类truck中的display()函数。 从而输出其基本信息。 5.在多重继承中,若一类声明为虚基类,则能保证一个派生类间接地多次继承该类时,派生类中只继承该基类的一份成员,避免了派生类中访问公共基类的共有属性多份拷贝的二义性。 ===================================================================== Part17: 运算符重载,友元函数和this指针: 定义一个计数器类counter,具备自增,自减功能(前后缀);输入输出>>,<<功能。 在main函数里测试该类。 #include #include usingnamespacestd; classcounter; istream&operator>>(istream&is,counter&a); ostream&operator<<(ostream&os,counter&a); classcounter//定义类counter { private: doubleP; public: counter(){}//无参构造函数 counter(doublep): P(p){}//带参构造函数 counteroperator++();//重载前置++ counteroperator++(int);//重载后置++ counteroperator--();//重载前置-- counteroperator--(int);//重载后置-- friendistream&operator>>(istream&is,counter&a);//重载输入运算符>> friendostream&operator<<(ostream&os,counter&a);//重载输出运算符<< }; countercounter: : operator++()//前置++实现 { ++P; return*this; } countercounter: : operator++(int)//后置++实现 { countera=*this; ++(*this); returna; } countercounter: : operator--()//前置--实现 { --P; return*this; } countercounter: : operator--(int)//后置--实现 { countera=*this; --(*this); returna; } istream&operator>>(istream
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 课程设计