掌握面向对象程序设计继承和派生机制的概念

简介: 掌握面向对象程序设计继承和派生机制的概念

实验内容

实验目的:

掌握面向对象程序设计继承和派生机制的概念

! 掌握类继承关系中的构造函数的定义方法

●掌 握派生类中构造函数和析构函数的执行顺序

掌握三种继承方式的特点和属性

实验内容布置

设计-一个交通工具类tool,具有轮胎数、生产厂家、限载人数、限载重量;设

计-一个汽车类Motor,该类具有限载人数、轮胎数、马力数、生产厂家多个数

据成员,根据Motor类派生出Car类、Bus类和Truck类, 分别新增单程费用、

载人单价、载重单价等数据成员。再设计-一个自行车类bicycle,具有轮胎与

踏板直径比,生产厂家、限载人数、限载重量、轮胎数等数据成员。根据

bicycle和motor,派生出电动自行车类moto. bicycle, 新增数据成员市场价

格。说明:

每个类都具有成员函数Display,用于输出各类对象的相关信息。

➢自行设计main函数, 生成各个类的对象并调用display函数显示各类对象的相

关信息。

➢要求利用多继承的概念。每个类要有构造函数,要体现构造函数的调用顺

序;

要求使用虚基类来解决二义性问题

➢自行设计main函数,能将上面要求体现出来。

实验代码

#include <iostream>
using namespace std;
// 交通工具类
class Tool {
protected:
    int tireNum;            // 轮胎数
    string manufacturer;    // 生产厂家
    int maxPassenger;       // 最大载人数
    int maxLoad;            // 最大载重量
public:
    // 构造函数
    Tool(int t, string m, int p, int l) : tireNum(t), manufacturer(m), maxPassenger(p), maxLoad(l) {}
    // 显示信息函数
    virtual void Display() {
        cout << "Tire number: " << tireNum << endl;
        cout << "Manufacturer: " << manufacturer << endl;
        cout << "Max passenger: " << maxPassenger << endl;
        cout << "Max load: " << maxLoad << endl;
    }
};
// 汽车类,继承自交通工具类
class Motor : public virtual Tool {
protected:
    int maxPower;   // 最大马力数
public:
    // 构造函数
    Motor(int t, string m, int p, int l, int mp) : Tool(t, m, p, l), maxPower(mp) {}
    // 显示信息函数
    void Display() {
        Tool::Display();    // 调用父类的显示信息函数
        cout << "Max power: " << maxPower << endl;
    }
};
// 小汽车类,继承自汽车类
class Car : public Motor {
protected:
    int singleCost;     // 单程费用
public:
    // 构造函数
    Car(int t, string m, int p, int l, int mp, int c) : Tool(t, m, p, l), Motor(t, m, p, l, mp), singleCost(c) {}
    // 显示信息函数
    void Display() {
        Motor::Display();   // 调用父类的显示信息函数
        cout << "Single cost: " << singleCost << endl;
    }
};
// 公交车类,继承自汽车类
class Bus : public Motor {
protected:
    int passengerPrice;     // 载人单价
public:
    // 构造函数
    Bus(int t, string m, int p, int l, int mp, int pp) : Tool(t, m, p, l), Motor(t, m, p, l, mp), passengerPrice(pp) {}
    // 显示信息函数
    void Display() {
        Motor::Display();   // 调用父类的显示信息函数
        cout << "Passenger price: " << passengerPrice << endl;
    }
};
// 卡车类,继承自汽车类
class Truck : public Motor {
protected:
    int loadPrice;      // 载重单价
public:
    // 构造函数
    Truck(int t, string m, int p, int l, int mp, int lp) : Tool(t, m, p, l), Motor(t, m, p, l, mp), loadPrice(lp) {}
    // 显示信息函数
    void Display() {
        Motor::Display();   // 调用父类的显示信息函数
        cout << "Load price: " << loadPrice << endl;
    }
};
// 自行车类,继承自交通工具类
class Bicycle : public virtual Tool {
protected:
    float tirePedalRatio;   // 轮胎与踏板直径比
public:
    // 构造函数
    Bicycle(int t, string m, int p, int l, float tp) : Tool(t, m, p, l), tirePedalRatio(tp) {}
    // 显示信息函数
    void Display() {
        Tool::Display();    // 调用父类的显示信息函数
        cout << "Tire-pedal ratio: " << tirePedalRatio << endl;
    }
};
// 电动自行车类,继承自自行车类和汽车类
class MotoBicycle : public Bicycle, public Motor {
protected:
    int marketPrice;    // 市场价格
public:
    // 构造函数
    MotoBicycle(int t, string m, int p, int l, float tp, int mp, int market) : Tool(t, m, p, l), Bicycle(t, m, p, l, tp), Motor(t, m, p, l, mp), marketPrice(market) {}
    // 显示信息函数
    void Display() override {
        cout << "Moto.Bicycle:" << endl;   // 输出类名
        Bicycle::Display();    // 调用父类的显示信息函数
        Motor::Display();      // 调用父类的显示信息函数
        cout << "Market price: " << marketPrice << endl;
    }
};
int main() {
    // 创建交通工具对象并调用显示信息函数
    Tool tool(4, "Tool Manufacturer", 5, 500);   
    tool.Display();     
    // 创建汽车对象并调用显示信息函数
    Motor motor(4, "Motor Manufacturer", 5, 500, 1000);
    motor.Display();    
    // 创建小汽车对象并调用显示信息函数
    Car car(4, "Car Manufacturer", 5, 500, 1000, 10);
    car.Display();      
    // 创建公交车对象并调用显示信息函数
    Bus bus(6, "Bus Manufacturer", 50, 5000, 2000, 2);
    bus.Display();      
    // 创建卡车对象并调用显示信息函数
    Truck truck(12, "Truck Manufacturer", 3, 20000, 3000, 5);
    truck.Display();    
    // 创建自行车对象并调用显示信息函数
    Bicycle bicycle(2, "Bicycle Manufacturer", 1, 100, 1.5);
    bicycle.Display();  
    // 创建电动自行车对象并调用显示信息函数
    MotoBicycle motoBicycle(2, "Moto.Bicycle Manufacturer", 1, 100, 1.5, 2000, 15000);
    motoBicycle.Display();
    return 0;
}
  • 运行结果
相关文章
|
1月前
|
存储 编译器 C++
【C++】面向对象编程的三大特性:深入解析继承机制(三)
【C++】面向对象编程的三大特性:深入解析继承机制
|
5月前
|
C++
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
|
5月前
|
安全
面向对象特征(抽象、封装、继承、多态)的具体用法
面向对象特征(抽象、封装、继承、多态)的具体用法
23 0
|
6月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
40 0
|
6月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
80 2
|
6月前
|
编译器 C++
[C++] 面向对象的三大特性:封装、继承和多态
[C++] 面向对象的三大特性:封装、继承和多态
80 0
|
存储 算法 Java
面向对象编程实践:类、对象与继承
面向对象编程实践:类、对象与继承
58 0
|
安全 Java 编译器
C++ 面向对象三大特性——继承
面向对象三大特性的,封装,继承,多态,今天我们研究研究C++的继承。
|
Java 编译器 C++
【面向对象语言三大特性之 “继承”】(二)
【面向对象语言三大特性之 “继承”】(二)
53 0
|
安全 程序员
【面向对象语言三大特性之 “继承”】(一)
【面向对象语言三大特性之 “继承”】(一)
88 0