设计一个抽象类Vehicle

】设计一个抽象类Vehicle,其中包含2个纯虚函数setdata()和show();由它派生出类Car和类Truck,类Car包含名称、颜色、载客数3个数据成员,类Truck包含名称、颜色、载重量3个数据成员

#include <iostream>
#include <string>
using namespace std;

// 抽象类 Vehicle
class Vehicle {
public:
    virtual void setdata() = 0;
    virtual void show() = 0;
};

// 派生类 Car
class Car : public Vehicle {
private:
    string name;
    string color;
    int passenger_num; 
public:
    void setdata() {
        cout << "请输入汽车的名称:";
        cin >> name;
        cout << "请输入汽车的颜色:";
        cin >> color;
        cout << "请输入汽车的载客数:";
        cin >> passenger_num;
    }
    void show() {
        cout << "汽车的名称为:" << name << endl;
        cout << "汽车的颜色为:" << color << endl;
        cout << "汽车的载客数为:" << passenger_num << endl;
    }
};

// 派生类 Truck
class Truck : public Vehicle {
private:
    string name;
    string color;
    int load_weight;
public:
    void setdata() {
        cout << "请输入卡车的名称:";
        cin >> name;
        cout << "请输入卡车的颜色:";
        cin >> color;
        cout << "请输入卡车的载重量:";
        cin >> load_weight;
    }
    void show() {
        cout << "卡车的名称为:" << name << endl;
        cout << "卡车的颜色为:" << color << endl;
        cout << "卡车的载重量为:" << load_weight << endl;
    }
};

int main() {
    Vehicle* pVehicle;
    Car car;
    Truck truck;
    pVehicle = &car;
    pVehicle->setdata();
    pVehicle->show();
    pVehicle = &truck;
    pVehicle->setdata();
    pVehicle->show();
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    首先,定义一个抽象类Vehicle,其中包含两个纯虚函数setdata()和show():

    class Vehicle{
    public:
        virtual void setdata() = 0;  // 纯虚函数
        virtual void show() = 0;    // 纯虚函数
    };
    

    这里使用了virtual关键字定义纯虚函数。使用virtual关键字,表示这些函数是虚函数,可以在派生类中覆盖实现。

    接下来,定义类Car和类Truck,这两个派生类分别包含不同的数据成员。例如,类Car包含名称、颜色、载客数三个数据成员:

    class Car : public Vehicle{
    private:
        string name;
        string color;
        int passenger;
    public:
        void setdata(){
            cout << "Enter Car Name: ";
            cin >> name;
            cout << "Enter Car Color: ";
            cin >> color;
            cout << "Enter Car Passenger: ";
            cin >> passenger;
        }
        void show(){
            cout << "Car Name: " << name << endl;
            cout << "Car Color: " << color << endl;
            cout << "Car Passenger: " << passenger << endl;
        }
    };
    
    class Truck : public Vehicle{
    private:
        string name;
        string color;
        int loading;
    public:
        void setdata(){
            cout << "Enter Truck Name: ";
            cin >> name;
            cout << "Enter Truck Color: ";
            cin >> color;
            cout << "Enter Truck Loading: ";
            cin >> loading;
        }
        void show(){
            cout << "Truck Name: " << name << endl;
            cout << "Truck Color: " << color << endl;
            cout << "Truck Loading: " << loading << endl;
        }
    };
    

    这里使用了C++中的继承特性。类Car和类Truck都继承了基类Vehicle,然后分别实现了setdata()和show()函数。

    最后,可以在主函数中创建对象并调用这些函数:

    int main(){
        Vehicle* ptr;
        Car c;
        Truck t;
        ptr = &c;
        ptr->setdata();
        ptr->show();
        ptr = &t;
        ptr->setdata();
        ptr->show();
        return 0;
    }
    

    这里使用了指针和动态绑定的特性。首先定义了一个基类指针ptr,然后将ptr指向类Car的对象,调用setdata()和show()函数。接着,将ptr指向类Truck的对象,同样调用setdata()和show()函数。整个过程利用了多态的特性,简化了代码,提高了程序的可维护性。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^