1. Target:定义一个车(vehicle)基类
    具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。
    自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。
    从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。
  2. 代码如下:
#include<iostream>
#include<string>
using namespace std;
class vehicle {
private:
double MaxSpeed;
double Weight;
public:
vehicle(double MS,double WE) {
MaxSpeed = MS;
Weight = WE;
}
~vehicle() { }
double GetMaxSpeed() {
return MaxSpeed;
}
double GetWeight() {
return Weight;
}
void Run() {
cout << "The MaxSpeed of the vehicle is " << MaxSpeed << endl;
cout << "The Weight of the vehicle is " << Weight << endl;
}
void Stop() {
cout << "The vehicle has stopped!!!" << endl;
}
};
class bicycle :virtual public vehicle {
private:
double Height;
public:
bicycle(double MS,double WE,double HE):vehicle(MS, WE) {
Height = HE;
}
~bicycle() { }
double GetHeight() {
return Height;
}
void Run() {
cout << "The height of the bicycle is "<< Height << endl;
}
void Stop() {
cout << "The bicycle has stopped!" << endl;
}
};
class motorcar :virtual vehicle {
private:
int SeatNum;
public:
motorcar(double MS, double WE, int SN):vehicle(MS,WE) {
SeatNum = SN;
}
~motorcar() { }
int GetSeatNum() {
return SeatNum;
}
void Run() {
cout << "The SeatNum of the motorcar is "<< SeatNum << endl;
}
void Stop() {
cout << "The motorcar has stopped!" << endl;
}
};
class motorcycle :public bicycle, public motorcar {
public:
motorcycle(double m, double w, double h, double n) :vehicle(m, w), bicycle(m, w, h), motorcar(m, w, n) { }
~motorcycle() { }
void Run() {
cout << "This is a motorcycle:" << endl;
cout << "MaxSpeed:" << GetMaxSpeed() << endl;
cout << "Weight:" << GetWeight() << endl;
cout << "Height:" << GetHeight() << endl;
cout << "SeatNum:" << GetSeatNum() << endl;
}
void Stop() {
cout << "The motorcycle has stopped!!!" << endl;
}
};
int main() {
vehicle t1(12.0, 12.0);
t1.Run();
t1.Stop();
bicycle t2(16.0, 15.2, 36);
t2.Run();
t2.Stop();
motorcar t3(13, 65, 33);
t3.Run();
t3.Stop();
motorcycle t4(12, 56, 8, 4);
t4.Run();
t4.Stop();
return 0;
}

3.测试截图

C++继承和派生练习(一)--关于vehicle基类的更多相关文章

  1. 模块的封装之C语言类的继承和派生

    [交流][微知识]模块的封装(二):C语言的继承和派生 在模块的封装(一):C语言的封装中,我们介绍了如何使用C语言的结构体来实现一个类的封装,并通过掩码结构体的方式实 现了类成员的保护.这一部分,我 ...

  2. DAY7-面向对象之继承与派生

    一.初识继承 什么是继承 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类又可称为基类或超类,新建的类称为派生类或子类. 子类会“”遗传”父类的属性,从而解决代 ...

  3. 04737_C++程序设计_第6章_继承和派生

    例6.1 使用默认内联函数实现单一继承. #include<iostream> using namespace std; class Point { private: int x, y; ...

  4. C++学习之路—继承与派生(三):多重继承与虚基类

    (根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 多重继承是指一个派生类有两个或多个基类.例如,有 ...

  5. C/C++基础知识总结——继承与派生

    1. 类的继承与派生 1.1 派生类的定义 (1) 定义规范 class 派生类名: 继承方式 基类1名, 继承方式 基类2名... { ...派生类成员声明; }; (2) 从以上形式上看可以多继承 ...

  6. C++学习笔记44:继承与派生

    类的组合,类的继承 类的组合(汽车类,轮子类,此时可以把轮子类组合到汽车类:) 类的继承(交通工具类,汽车类,此时汽车类可以派生自交通工具类:) 组合:常用描述has a.. 继承:常用描述is a ...

  7. C++复习:继承与派生

    1继承概念 面向对象程序设计有4个主要特点:抽象.封装.继承和多态性.说了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序设计的基础. 要 ...

  8. Python入门之面向对象之类继承与派生

    本章内容 一.继承 二.抽象类 三.继承的实现原理 ======================================================= 一.继承 1. 继承的定义 继承是一 ...

  9. C++课程小结 继承与派生

    单继承与多重继承的区别 单继承:一个子类(派生类)只有一个父类(只由一个基类派生而成) 多继承:一个子类(派生类)有多个父类(由多个基类派生而成) 派生类的构成 (1) 从基类继承过来的成员(包括数据 ...

随机推荐

  1. SQL使用bcp方式导入,导出数据2

    select * from A_Account   EXEC sp_configure 'allow_updates' GO EXEC sp_configure 'allow_updates',0; ...

  2. stroke和fill顺序对绘图的影响

    用canvas绘制线条和填充,fill()和stroke()调用顺序直接影响绘制的结构 先调用stroke在调用fill,绘制的效果看上去lineWidth只绘制出来一半,还以为是个大问题. < ...

  3. 慧都启动“正版IDE联合超值推广计划

    越来越多的中国软件企业为盗版所害而蒙受巨大损失,正版化意识逐渐兴起.IDE(集成开发环境)是软件开发.编写代码必备工具,而正版IDE更具有运行更稳定.编码更安全.保障更加完善等特点,逾为中国软件行业企 ...

  4. SpringCloud的学习记录(8)

    这一章节讲zipkin-server. 在我们生成的Demo项目上右键点击New->Module->spring Initializr, 然后next, 填写Group和Artifact等 ...

  5. broadcastemit

    http://code.angularjs.org/1.0.2/docs/api/ng.$rootScope.Scope#$broadcast scope可以以类似于DOM事件的方式进行事件传播.事件 ...

  6. Facet constraits error: Spring 4.1 requires Java 1.6 or newer.

    问题来源: 在高版本的myeclipse,同步低版本的myeclipse提交的项目,可能会出现配置不一致. 问题描述: spring4.1不支持jdk1.6 注:在下载项目到本地的时候,myeclip ...

  7. 开发时复制aspx网页的方法

    简单的copy /paste    *.aspx网页,所使用的是同一个CodeBehind  ,这往往不是我们所想要的!!!我们一般都希望使这两个网页具有各自的  *.cs文件.步骤:①新建一个Web ...

  8. c++基础知识_c++11 类默认函数的控制:"=default" 和 "=delete"函数

    #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <vecto ...

  9. React中最基础的jsx语法

    import React, { Component } from 'react'; class App extends Component { render() { return ( <div ...

  10. 【转】JS模块化工具requirejs教程(一):初识requirejs

    随着网站功能逐渐丰富,网页中的js也变得越来越复杂和臃肿,原有通过script标签来导入一个个的js文件这种方式已经不能满足现在互联网开发模式,我们需要团队协作.模块复用.单元测试等等一系列复杂的需求 ...