第十四周实验内容1
更新时间:2024-04-13 08:06:01 阅读量: 综合文库 文档下载
- 第十四周周记推荐度:
- 相关推荐
第十四周实验内容:继承与派生
1. 编程
【问题描述】: 开发一个名为 Vehicle的类的层次体系。创建两个类Taxi和Truck,均以公有模式从类Vehicle中继承而来。Taxi类中应包含一个数据成员说明其是否载客。Truck类应包含一个数据成员说明其是否载货。添加必要的函数来控制和访问类的数据。编写一段测试程序,将Truck对象和Taxi对象打印到屏幕。
【实例输出】
【程序模板】共7个文件(Vehicle.h、Vehicle.cpp、Taxi.h、Taxi.cpp、Truck.h、Truck.cpp、driver.cpp)
************************************************************* // vehicle.h
#ifndef VEHICLE_H #define VEHICLE_H
#include
using namespace std;
class Vehicle{ public:
Vehicle( const int doors, const int cylinders, char *color, double initialFuel, const int transmission ); ~Vehicle();
void setColor ( char *color);
void setFuelLevel( double amount); const char *getColor() const; double getFuelLevel() const;
const int getTransmissionType() const; const int getNumberOfDoors() const; const int getNumberOfCylinders() const; void setClassName( const char*); const char *getClassName() const; void printVehicle(); private:
const int numberOfDoors; //门的个数
const int numberOfCylinders; // 汽缸的个数 char *vehicleColor; // 交通工具的颜色 double fuelLevel; // const int transmissionType; char *className; };
#endif
*********************************************************** //vehicle.cpp
#include
using namespace std;
Vehicle::Vehicle(const int doors, const int cylinders, char * color, double initialFuel, const int transmission):numberOfDoors(doors), numberOfCylinders(cylinders), transmissionType(transmission) /* 实现Vehicle类的构造函数定义*/
Vehicle::~Vehicle() {
delete [] vehicleColor;
delete [] className; }
void Vehicle::printVehicle() {
cout< /*实现Vehicle类成员函数setColor的定义*/ void Vehicle::setFuelLevel( double amount) { //假设满箱为20加仑 if (amount > 0.0 && amount <=20.0) fuelLevel=amount; else fuelLevel=5.0; } // caller is responsible for deleting memory const char *Vehicle::getColor() const { return vehicleColor; } double Vehicle::getFuelLevel() const { return fuelLevel; } const int Vehicle::getTransmissionType() const { return transmissionType; } const int Vehicle::getNumberOfDoors() const { return numberOfDoors; } const int Vehicle::getNumberOfCylinders() const { return numberOfCylinders; } void Vehicle::setClassName(const char *newName) { if (className!=0) delete [] className; className = new char [ strlen( newName) + 1]; strcpy (className, newName); } // caller is responsible for deleting memory const char *Vehicle::getClassName() const { return className;} ************************************************************** //taxi.h #ifndef TAXI_H #define TAXI_H #include class Taxi: public Vehicle { public: Taxi(double); /* 为成员函数hasCustomers写声明*/ /* 为成员函数setCustomers写声明*/ void printTaxi() const; private: bool customers; }; #endif *************************************************************************** //taxi.cpp #include \ Taxi::Taxi(double f) :Vehicle ( 4, 6, \ { customers = false; setClassName(\} /* 实现Taxi类的成员函数setCustomers*/ /* 实现Taxi类的成员函数hasCustomers*/ void Taxi::printTaxi() const { cout< *********************************************************************** //truck.h #ifndef TRUCK_H #define TRUCK_H #include #include \ class Truck: public Vehicle { public: Truck (double); bool hasCargo() const; void setCargo( bool); void printTruck() const; private: bool cargo; }; #endif ************************************************************************* //truck.cpp #include \ /* 实现Truck类构造函数*/ bool Truck::hasCargo() const { return cargo; } void Truck::setCargo(bool c) { cargo = c;} void Truck::printTruck() const { cout< ************************************************************************* //driver for vehicle #include #include \#include \#include \ int main() { } Vehicle car(2, 6, \Taxi cab(3.3); Truck mack(7.54); /* 编写代码使mack载货*/ /* 编写代码打印所有对象,包括Vehicle对象、Taxi对象、Truck对象*/ return 0; 修改后代码: // vehicle.h #ifndef VEHICLE_H #define VEHICLE_H #include using namespace std; class Vehicle{ public: Vehicle( const int doors, const int cylinders, char *color, const int transmission, double initialFuel); ~Vehicle(); void setColor ( char *color); void setFuelLevel( double amount); char *getColor() const; double getFuelLevel() const; int getTransmissionType() const; int getNumberOfDoors() const; int getNumberOfCylinders() const; void setClassName( const char*); char *getClassName() const; void printVehicle(); private: const int numberOfDoors; //门的个数 const int numberOfCylinders; // 汽缸的个数 char *vehicleColor; // 交通工具的颜色 double fuelLevel; // const int transmissionType; char *className; }; #endif //vehicle.cpp #include #include \ using namespace std; Vehicle::Vehicle(const int doors, const int cylinders, char * color, const int transmission, double initialFuel):numberOfDoors(doors), numberOfCylinders(cylinders), transmissionType(transmission) /* 实现Vehicle类的构造函数定义*/ { setClassName(\ setColor(color); fuelLevel=initialFuel; } Vehicle::~Vehicle() { delete [] className; } void Vehicle::printVehicle() { cout< <<\ <<\\ <<\ <<\ <<\} void Vehicle::setColor(char *cl)/*实现Vehicle类成员函数setColor的定义*/ { vehicleColor=new char[strlen(cl)+1]; if(vehicleColor!=0) strcpy(vehicleColor,cl); } void Vehicle::setFuelLevel( double amount) { //假设满箱为20加仑 if (amount > 0.0 && amount <=20.0) fuelLevel=amount; else of cylinders: fuelLevel=5.0; } // caller is responsible for deleting memory char *Vehicle::getColor() const { return vehicleColor; } double Vehicle::getFuelLevel() const { return fuelLevel; } int Vehicle::getTransmissionType() const { return transmissionType; } int Vehicle::getNumberOfDoors() const { return numberOfDoors; } int Vehicle::getNumberOfCylinders() const { return numberOfCylinders; } void Vehicle::setClassName(const char *newName) { className = new char [ strlen( newName) + 1]; if (className!=0) strcpy (className, newName); } // caller is responsible for deleting memory char *Vehicle::getClassName() const { return className;} #include class Taxi: public Vehicle { public: Taxi(int a,int b,char *c,int d,double f); bool hasCustomers() const;/* 为成员hasCustomers写声明*/ void setCustomers(bool) ;/* 为成员setCustomers写声明*/ virtual void printTaxi() const; private: bool customers; }; #ifndef TAXI_H #define TAXI_H #include \ Taxi::Taxi(int a,int b,char *c,int d,double f) :Vehicle ( a,b,c,d,f) { customers = false; setClassName(\} 函数数函 bool Taxi::hasCustomers() const{return customers;}/* 实现Taxi类的成员函数setCustomers*/ void Taxi::setCustomers(bool c) {c=customers;}/* 实现Taxi类的成员函数hasCustomers*/ void Taxi::printTaxi() const { cout< cout<<\ else cout<<\} #endif #ifndef TRUCK_H #define TRUCK_H #include Truck (int a,int b,char *c,int d,double f); bool hasCargo() const; void setCargo( bool); virtual void printTruck() const; private: bool cargo; }; #endif #include \ Truck::Truck (int a,int b,char *c,int d,double f):Vehicle (a,b,c,d,f) { cargo=false; setClassName(\};/* 实现Truck类构造函数*/ bool Truck::hasCargo() const { return cargo; } void Truck::setCargo(bool c) { cargo = c;} void Truck::printTruck() const { cout< < cout<<\ else cout<<\ } //driver for vehicle #include #include \#include \#include \ int main() { Vehicle car(2, 6, \ Taxi cab(4,6,\ Truck mack(2,16,\mack.setCargo(1); car.printVehicle(); cab.printTaxi(); mack.printTruck(); return 0; } 【运行结果截图】 2. 练习题1 【程序代码】 #include class Shape //基类Shape的定义 { public: Shape(){} ~Shape(){} double getArea()const; }; class Circle: public Shape // 派生类Circle定义 { public: Circle (double = 0.0 ); ~Circle (){}; double getArea() const; // 返回面积 private: double radius; // 圆半径 }; class Rectangle : public Shape { // 派生类Rectangle定义 public: Rectangle( int = 0, int = 0); // 构造函数 ~Rectangle(){} double getArea() const; // 返回面积 private: int a,b; // 矩形的长和宽 }; double Shape::getArea() const { return 0.0; } // Shape类getArea函数的定义 Circle::Circle( double radiusValue ) { radius= radiusValue ; } //Circle类构造函数 double Circle::getArea() const { return 3.14159 * radius * radius; } //Circle类getArea函数定义 Rectangle::Rectangle( int aValue, int bValue ) { a=aValue; b=bValue; } // Rectangle类构造函数 double Rectangle::getArea() const { return a * b; } // Rectangle类getArea函数定义 void main() { Circle circle ( 3.5 ); // 创建Circle类对象 Rectangle rectangle (5, 10 ); // 创建Rectangle类对象 cout<<\ cout<<\ } 【思考题及问题】 修改程序,增加计算正方形面积的功能。 提示:在Rectangle类的基础上创建派生类Square,代码如下: class Square: public Rectangle { public: Square(float len); ~Square(){} }; Square::Square(float len):Rectangle(len,len) {} 在main函数中增加如下语句: Square square(5); cout<<\ 3. 练习题2 【程序代码】 1) #include 3) class Point //基类Point类的定义 4) { 5) public: //公有函数成员 6) void InitP(float xx=0, float yy=0) {X=xx;Y=yy;} 7) void Move(float xOff, float yOff) {X+=xOff;Y+=yOff;} 8) float GetX() {return X;} 9) float GetY() {return Y;} 10) private: //私有数据成员 11) float X,Y; 12) }; 13) class Rectangle: public Point //派生类声明部分 14) { 15) public: //新增公有函数成员 16) void InitR(float x, float y, float w, float h) 17) { X=x; Y=y; //访问基类私有数据成员 18) W=w;H=h; 19) } 20) float GetH() {return H;} 21) float GetW() {return W;} 22) private: //新增私有数据成员 23) 24) 25) 26) 27) 28) 29) 30) float W,H; }; void main() { Rectangle rect; cout< 17行 Rectangle类公有继承Point基类,其成员函数无法访问基类下的私有成员数据 该程序段应改为InitR(x,y); 28行 Rectangle类公有继承Point基类,其对象无法访问基类下的私有成员数据 该程序段应改为 rect.InitR(4,5,6,7); 通过成员函数进行访问 10行改为Protected: 该程序段应改为InitR(x,y); 28行 Rectangle类公有继承Point基类,其对象无法访问基类下的保护成员数据 该程序段应改为 rect.InitR(4,5,6,7); 通过成员函数进行访问 10行改为 Public: 可编译 13行改为Protected: 17行 Rectangle类公有继承Point基类,其成员函数无法访问基类下的私有成员数据 该程序段应改为InitR(x,y); 28行 Rectangle类公有继承Point基类,其对象无法访问基类下的私有成员数据 该程序段应改为 rect.InitR(4,5,6,7); 通过成员函数进行访问 13行改为private: 17行 Rectangle类公有继承Point基类,其成员函数无法访问基类下的私有成员数据 该程序段应改为InitR(x,y); 28行 Rectangle类公有继承Point基类,其对象无法访问基类下的私有成员数据 该程序段应改为 rect.InitR(4,5,6,7); 通过成员函数进行访问 4. 自测练习1 阅读下面程序,写出运行结果并上机调试运行。 #include A(){cout<<”constructing A”< class B:public A {public: B(){cout<<”constructing B”< ~B(){cout<<”desstructing B”< class C:public B {public: C(){cout<<”constructing C”< int main() {C c1; return 0; } constructing A、 constructing B constructing C desstructing C desstructing B desstructing A 5.自测练习二 阅读下面程序,写出运行结果并上机调试运行。 #include class B1 //基类B1,构造函数有参数 { public: B1(int i) {val1=i;cout<<\ ~B1() {cout<<\private: int val1; }; class B2 //基类B2,构造函数有参数 { public: B2(int j) {val2=j;cout<<\ ~B2() {cout<<\private: int val2; }; class B3 //基类B3,构造函数无参数 { public: B3() {cout<<\ ~B3() {cout<<\}; class C: public B2, public B1, public B3 { public: C(int a, int b): B1(a),B2(b){} }; void main() { C obj(1,2); } constructing B2 2 constructing B1 1 constructing B3 deconstructing B3 deconstructing B1 1 deconstructing B2 2 6.自测练习三 阅读下面程序,写出运行结果并上机调试运行。 #include { public: int nv; A(int x) {nv = x; cout << \:\ void fun(){cout << \}; class B1:virtual public A { public: int nv1; B1(int x,int y):A(y){nv1= x; cout << \:\}; class B2:virtual public A { public: int nv2; B2(int x,int y):A(y) {nv2 = x; cout << \:\ }; class C:public B1,public B2 { public: C(int x, int y, int z): B1(y,x),B2(z,x),A(x) {cout << \:\}; void main() { C c1(1,2,3); c1.nv = 2; c1.fun(); } constructor of A:1 constructor of B1:2 constructor of B2:3 constructor of C:1 Member of A:2 7.自测练习四 阅读下面程序,写出运行结果并上机调试运行。 #include class Base1{public: Base1(){ cout <<\class Base2{public: Base2(){ cout <<\class Base3{public: Base3(){ cout <<\class Base4{public: Base4(){ cout <<\ class Derived :public Base1, virtual public Base2,public Base3, virtual public Base4 { public: Derived() :Base4(), Base3(), Base2(), Base1(){} }; void main() { Derived aa; } Base 2 Base 4 Base 1 Base 3 8.自测练习五 阅读下面程序,找出语法错误并改正之;写出程序运行结果并上机调试运行验证之。 #include class B:public A{}; class C:public A{}; class D:public B,public C { int getn(){return n;} }; void main() { D d; d.n=10; cout< 改正: #include class B:virtual public A{}; class C:virtual public A{}; class D:public B,public C { int getn(){return n;} }; void main() { } D d; d.n=10; cout< 结果: 10
正在阅读:
第十四周实验内容104-13
假如我是一只蜜蜂作文优秀6篇03-26
物理实验习题与解答06-04
高三主题班会课教案(共8篇)06-18
浙江省杭州市2017中考英语试卷(含word版试卷、英语听力mp3、答04-12
变频器技术实验指导书06-04
参观农场的英语作文04-01
一场别开生面的辩论会作文600字07-03
学包粽子作文500字07-06
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 四周
- 实验
- 内容
- 三相四线错误接线检查方法3
- 络合滴定复习题
- 部编版九年级语文下册第10课《唐雎不辱使命》教案
- 中国文明史上尔雅满分答案
- 2018年驻马店市小学毕业小升初模拟数学试题(共6套)附详细答案
- 华为认证考试题库-HCNP - 图文
- 儿童画学生评语
- 施工技术管理办法
- 2007年—2008年珠海市党政领导干部
- 新职业英语2 通用版 Unit 3 Teaching Plan
- 跨国企业并购案例分析
- 关于征求意见的情况报告
- 湖北省枣阳市第七中学2016届高三地理下学期期中试题
- 入院、出院、转科、转院、留观制度与流程规范
- 小学一年级经典诵读教案
- XX公司步行街招商策划书
- 微观经济学课后题答案--高鸿业主编 - 图文
- 蒙古国地名中英文手册
- P2020启动过程
- 用胸怀去包容,用智慧去改变