班级:电子信息工程1401班
—
—面向对象程序设计
实验一
一. 实验题目
定义盒子Box类,要求具有以下成员变量:长、宽、高分别为length,with,high;具有一个静态成员变量:盒子和个数number;具有以下成员函数:1)构造函数和析构函数;2)计算盒子体积的函数;3)计算盒子的表面积的函数;4)显示长、宽、高、体积和表面积函数;5)显示盒子个数的静态成员函数。编写main函数进行测试。
二. 实验代码
Box.h
#include using namespace std; class Box { private: double length,width,high; static int number; public: Box(double a=0,double b=0,double c=0) { length=a; width=b; high=c; number++; } ~Box() { number--; } double volunm(); double area(); void display(); int getnumber(); }; #include #include\"Box.h\" using namespace std; double Box::volunm() { return length*width*high; } double Box::area() Box.cpp { return 2*(length*width+length*high+width*high); } void Box::display() { cout<<\"长:\"< int Box::getnumber() { return number; } main.cpp #include #include\"Box.h\" using namespace std; int Box::number=0; void main() { Box a(10,10,10); a.display(); cout<<\"个数:\"< 三. 实验结果 四.实验总结 这个题目主要是考构造函数、析构函数和静态成员变量的使用。在盒子的类中,声明了长、宽、高三个私有成员,和一个number的静态成员变量。这道题的关健是不能直接访问静态成员变量,必须访问包含静态成员变量的函数才可以对其进行操作,且静态成员必须赋初值。 实验二 一. 实验题目 定义一个车基类Vehicle,含私有成员speed、weight。派生出自行车类Bicycle,增加high成员;派生出汽车类Car,增加seatnum(座位数)成员。每个类都有:各自的构造函数、设置(如setSpeed等)和返回每个成员变量(如getSpeed等)的函数、显示名称和参数的函数。编写main函数进行测试。 二. 实验代码 Vehicle.h #ifndef VEHICLE_H #define VEHICLE_H #include using namespace std; class Vehicle { private: double speed,weight; public: Vehicle(double a=0,double b=0) { speed=a; weight=b; } void setspeed(double a); void setweight(double b); double getspeed(); double getweight(); }; #endif Vehicle.cpp #include\"Vehicle.h” using namespace std; void Vehicle::setspeed(double a) { speed=a; } void Vehicle::setweight(double b) { weight=b; } double Vehicle::getspeed() { return speed; } double Vehicle::getweight() { return weight; } #ifndef BICYCLE_H #define BICYCLE_H #include\"Base.h\" class Bicycle:public Vehicle { private: Bicycle.h double high; public: Bicycle(double a=0) { high=a; } void sethigh(double a); double gethigh(); void getname(); }; #endif Bicycle.cpp #include #include\"Bicycle.h\" using namespace std; void Bicycle::sethigh(double a) { high=a; } double Bicycle::gethigh() { return high; } void Bicycle::getname() { cout<<\"名称:\"<<\"自行车\"< #ifndef CAR_H #define CAR_H #include\"Bicycle.h\" class Car:public Bicycle { private: int seatnum; public: Car(int a=0) Car.h { seatnum=a; } void setseatnum(int a); int getseatnum(); void getname(); }; #endif #include #include\"Car.h\" using namespace std; void Car::setseatnum(int a) Car.cpp { seatnum=a; } int Car::getseatnum() { return seatnum; } void Car::getname() { cout<<\"名称:\"<<\"汽车\"< Main.cpp #include #include\"Vehicle.h\" #include\"Bicycle.h\" #include\"Car.h\" using namespace std; void main() { Bicycle a; a.setspeed(20); a.setweight(30); a.sethigh(1); a.getname(); cout<<\"速度:\"< b.setspeed(120); b.setweight(800); b.sethigh(1.5); b.setseatnum(2); b.getname(); cout<<\"速度:\"< 三.实验结果 四.实验总结 这道题目主要考的是类之间的继承和继承后的封装问题。我觉得这道题目比较简单,和平时练习的难度差不多,只是在每个类中都有set和get函数,所以只是写起来有一点麻烦而已。 实验三 一. 实验题目 写一个程序,定义抽象类TDShape,由其他派生2个类:Circle(圆形),Square(正方形)。各自需要定义独有的数据成员和成员函数。用虚函数area()和printName()分别为计算几种图形的面积和现实图形名称。要求编写以TDShape为接口的函数,借以访问具体类如Circle和Square类的成员函数area()和printName()。编写main函数进行测试。 二. 实验代码 TDshap.h #ifndef TDSHAPE_H #define TDSHAPE_H #include using namespace std; class TDshape { public: virtual double area()=0; virtual void printName()=0; }; #endif #ifndef CIRCLE_H #define CIRCLE_H #include\"TDshape.h\" class Circle:public TDshape { private: double r; public: Circle.h Circle(double a=0) { r=a; } virtual double area(); virtual void printName(); }; #endif #include\"Circle.h\" double Circle::area() { return 3.1415926*r*r; Circle.cpp } void Circle::printName() { cout<<\"名称:\"<<\"圆\"< #ifndef SQUARE_H #define SQUARE_H #include \"TDshape.h\" class Square:public TDshape { private: double length; Square.h public: Square(double a=0) { length=a; } virtual double area(); virtual void printName(); }; #endif #include\"Square.h\" double Square::area() { Square.cpp return length*length; } void Square::printName() { cout<<\"名称:\"<<\"正方形\"< TDshap.cpp #include #include\"TDshape.h\" #include\"Circle.h\" #include\"Square.h\" using namespace std; void vpf(TDshape *bptr) { bptr->printName(); cout<<\"面积:\"< void main() { Circle a(5); TDshape *array; array=&a; vpf(array); cout< TDshape *array1; array1=&b; vpf(array1); } 三.实验结果 四.实验总结 这道题目考的是继承和多肽。先定义了一个TDshape的抽象类,并在TDshape类中设计了两个纯虚函数area()和printName(),他们实际上访问派生类Circl、Square类中同名虚函数的接口。每一个类都要根据自己的实际情况重定义各虚函数,以实现本类需要 的功能。在主函数里定义了基类对象的指针数组后可以通过基类指针访问虚函数也可以通过基类引用访问虚函数。其他的和第二题差不多,没什么难度。 学习本门课程的心得和体会 经过这几个星期对《C++面向对象程序设计》的学习,我学习到了基本的C++理论知识,了解到了C++语言程序设计的思想,这些知识都为我未来的发展和进一步的学习打下了坚实的基础。想要学好C++这门课程必须掌握C语言的基础运用,C++其实并不是一个新的计算机语言,它只是在C语言的基础上预先编写好了很多函数。所以如果把C语言比为砖块,那么C++就是有砖块组成的一些小的建筑。所以学习C++必需先掌握C语言的基础运用。 这几节课学习的最重要的知识就是从面向过程转变为面向对象的一个思维方式,面向对象不只是一种程序设计方法,还是一种建立客观事物模型、分析复杂事物的思想方法,他是以人们通常描述现实世界的方法来描述要解决的问题。面向对象的程序设计的基本特征:抽象、封装、继承和多态。抽象:对一类对象进行概括,抽出他们共同的性质并加以描述的过程。封装:将抽象得到的属性数据和行为代码有机的结合,形成一个具有类特征的统一体。继承:一个新类可以从已有的类派生而来。多态:不同对象对于同样的施加于其上的作用会有不同的反应。 C++语言课程是一门实践性很强的课程,光看书本和课堂听讲是远远不够的,一定要多动手写设计、编写程序才能有所进步。记得从最初的一节课只能写一个题目到后来的一节课可以编写三个题目,速度的提升正是熟练度提升的体现。其次在学习中必须做到循序渐进,对所学的每一部分内容都要完成一定数量的练习。所以每次上机课的习题都是老师精心挑选出来的,既有基本的题目,也有一些比较常规的题目,通过这几次的上机练习,调试错误来修订语法、排除逻辑错误、进而提高了编程能力,也积累了一定的编程经验。 对于学习,主要还是要自己努力,老师已经教的很仔细了,但是学习的主动权在我们 手中。我们要对这门语言要有兴趣。可能会有很多不知道,不理解的地方,当时我们应该多思考,借助一些书籍及网络的条件,进一步理解和体会。把自己学习的东西融会贯通就好了,主要还是在于对于课本的理解,主要还是自己领悟。 因篇幅问题不能全部显示,请点此查看更多更全内容