】设计一个抽象类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;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,定义一个抽象类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()函数。整个过程利用了多态的特性,简化了代码,提高了程序的可维护性。