C++:关于类的组合复杂实验设计(一)

在本次实验中,你要利用简单的类组合成复杂的类。按以下要求编写两个类,分别用于表示汽车发动机、变速箱,并利用这两个类的对象作为成员设计一个表示汽车的类。要求如下:

1)发动机类Engine:

1.1)用私有成员变量表示以下三项信息(括号中是变量类型):发动机排量capacity (float)、发动机排量maxPower (float)、燃料类型feulType。其中燃料类型有四种,请定义一个枚举类型表示燃料类型,枚举常量分别用于表示:汽油(PETROL),柴油(DIESEL),丙烷(PROPANE)以及天然气(NATRUAL_GAS)四种燃料类型。

1.2)编写私有成员函数,用于返回发动机燃料的名称,返回类型为string,类型名称为:PETROL: "汽油",DIESEL: "柴油", PROPANE: "丙烷",NATRUAL_GAS: "天然气"。

1.3)为上述三个成员变量分别编写公有成员函数,返回成员变量的值。

1.4)为上述三个成员变量分别编写公有成员函数,修改成员变量的值,函数参数为成员变量的新值。

1.5)编写公有成员函数show(),输出发动机的上述三个信息,其中燃料用1.2)中的燃料名称输出。

1.6)编写公有构造函数,用于初始化三个成员变量。该函数的默认参数值分别是:排量2,最大功率120,燃料类型PETROL。

2)变速箱类GearBox。要求:

2.1) 用一个私有成员numGears表示变速档数。

2.2)用一个私有成员变量type表示变速箱类型。定义一个枚举类型GearType,用于表示变速箱类型,GearType中定义以下5个枚举常量:MT,AT,AMT,CVT,DCT。

2.3)编写一个私有成员函数,用于返回变速箱类型名称。变速箱类型与名称的对应关系为:MT: "手动",AT:"自动",AMT:"机械式自动",CVT:"无级变速",DCT:"双离合变速"。函数的返回类型为string。

2.4)编写一个公有成员函数返回档位数。

2.5)编写一个公有成员函数修改档位数。

2.6)编写一个公有成员show(),输出变速箱类型名称以及档位数,注意便须向类型按照2.3)中的对应关系输出。

2.7)编写公有构造函数,用于初始化两个成员变量,构造函数的参数默认值为:变速箱类型:MT,档位数:4。

3)汽车类Car。要求:

3.1)包含四个私有成员变量,分别是:make(string)表示汽车厂商, numSeats(int)表示座位数, engine(Engine)表示汽车的发动机, gearbox(GearBox)表示汽车的变速箱。

3.2)编写公有成员函数changeEngine,更换汽车的发动机,函数参数是一个Engine对象。

3.3)编写公有成员函数changeGearBox,更换汽车的变速箱,函数参数是一个GearBox对象。

3.4) 编写公有成员函数show(),用于在控制台上输出输出汽车的所有信息,包括厂商,座位数以及发动机和变速箱信息。下面是一个输出示例:

厂商:奔驰,座位数:5

发动机参数:排量(L):2,最大功率(kW):150,燃料:汽油

变速箱参数:类型:自动,档位数:6

3.5)编写构造函数函数,初始化上述四个成员变量,构造函数的参数分别表示厂商、座位数、排量、最大功率、燃料类型、变速箱类型以及档位数。

4) 在main函数中定义一个Car对象,表示以下车辆信息:华晨宝马生产的5座车,发动机排量2.0L,最大功率115kW,燃料为汽油,变速箱为8档自动挡,输出车辆信息,然后将该车辆的发动机更换为最大功率195kW,变速箱更换为9档,并输出新的车辆信息。

#include<iostream>

using namespace std;

enum FType {PETROL,DIESEL,PROPANE,NATRUAL_GAS};//0 1 2 3
class Engine{
    public:
        Engine(int c=2,int p=120,FType f=PETROL){
            capacity=c;
            maxPower=p;
            FeulType=f;
        }
        float getcapcity(){
            return capacity;
        }
        float getmaxPower(){
            return maxPower;
        }
        int GetFeulType(){
            return FeulType;
        }
        void NewValue(float x,float y,FType z){
            capacity=x;
            maxPower=y;
            FeulType=z;//强制类型转换
        }
        void show(){
            cout<<"排量(L):"<<capacity;
            cout<<",最大功率(kW):"<<maxPower;
            cout<<",燃料:"<<FeulName(FeulType)<<endl;
        }
    private:
        float capacity,maxPower;//发动机排量,最大功率
        enum  FType FeulType;//燃料类型
        string FeulName(FType FeulType){
            if(FeulType==PETROL) return "PETROL-汽油";
            if(FeulType==DIESEL) return "DIESEL-柴油";
            if(FeulType==PROPANE) return "PROPANE-丙烷";
            if(FeulType==NATRUAL_GAS) return "NATRUAL_GAS-天然气";
        }//私有成员函数,用于返回发动机燃料的名称

};

enum GType{MT,AT,AMT,CVT,DCT};
class GearBox{
    public:
        GearBox(int x=0,GType z = MT){
            numGears=x;
            GearType=z;
        }
        int GetnumGears(){
            return numGears;//返回档数
        } 
        void NewnumGears(int x){
            numGears=x;//修改档数
        }
        void show(){
            cout<<"变速箱类型:"<<GearName(GearType);
            cout<<",档位数:"<<numGears<<endl;
        }

    private:
        int numGears;//变速档数
        enum GType GearType;
        string GearName(GType GearType){
            if(GearType==MT) return "MT-手动";
            if(GearType==AT) return "AT-自动";
            if(GearType==AMT) return "AMT-机械式自动";
            if(GearType==DCT) return "DCT-双离合变速";
        }//私有成员函数,用于返回发动机燃料的名称
};

class car{
    public:
        car(string M,int N,Engine E,GearBox G):engine(E),gearbox(G){
            make=M;
            numSeats=N;
            engine=E;
            gearbox=G;
        }
        void ChangeEngine(Engine E){//更改发动机
            engine=E;
        }
        void ChangeGearBox(GearBox G){//更改变速箱
            gearbox=G;
        }
        void show(){
            cout<<"-----------------------------------------------------"<<endl;
            cout<<"厂商:"<<make<<","<<"座位数:"<<numSeats<<endl;
            cout<<"发动机参数:";
            engine.show();
            cout<<"变速箱参数:";
            gearbox.show();
            cout<<"-----------------------------------------------------"<<endl;
        }
    private:
        string make;//汽车厂商
        int numSeats;//座位数
        Engine engine;//汽车发动机
        GearBox gearbox;//汽车变速箱
};
int main()
{
    /*Engine E1(2,120,PETROL);
    cout<<E1.getcapcity()<<endl;
    cout<<E1.getmaxPower()<<endl;
    cout<<E1.GetFeulType()<<endl;
    E1.show();
    float x,y;
    enum FType z;
    cin>>x>>y;
    cin>>(int&)z;//使用(int&)进行类型转换
    E1.NewValue(x,y,z);
    E1.show();*/
    /*GearBox G1(4,MT);
    int x;
    cin>>x;
    G1.NewnumGears(x);
    cout<<"变速档位:"<<G1.GetnumGears()<<endl;
    G1.show();
    int y;
    enum GType z;
    cin>>y;
    cin>>(int&)z;
    GearBox G2(y,z);
    cout<<"变速档位:"<<G2.GetnumGears()<<endl;
    G2.show();*/
    string Making="华晨宝马";
    int NumSeats=5;
    //-------------
    float capac=2.0;
    float maxpow=115;
    enum FType F=PETROL;
    Engine engine(capac,maxpow,F);
    //-------------
    int NumGear=8;
    enum GType G=AT;
    GearBox gearbox(NumGear,G);
    //-------------
    car Car(Making,NumSeats,engine,gearbox);
    Car.show();

    cout<<"-----------------------------------------------------"<<endl;
    cout<<"请输入修改后的变速档数:";
    cin>>NumGear;//变速档数
    gearbox.NewnumGears(NumGear);
    cout<<"请输入修改后的发动机最大功率:";
    cin>>maxpow;//最大功率
    engine.NewValue(capac,maxpow,F);

    Car.ChangeEngine(engine);
    Car.ChangeGearBox(gearbox);
    cout<<"-----------------------------------------------------"<<endl;
    Car.show();
    cout<<"ending"<<endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值