美文网首页
(九)Vehicle

(九)Vehicle

作者: GoodTekken | 来源:发表于2023-03-27 08:06 被阅读0次
#include <typeinfo>
#include <iostream>

using namespace std;

class Vehicle  /*抽象基类,车辆*/
{
    public:
        virtual void run() = 0;
};

class Emergency
{
    public:
        virtual bool isEmergent() = 0;    //(1)
        virtual void runRedLight() = 0;   //(2)
};

class Car : public Vehicle
{
    public:
        ~Car()
        {
            
        }

        void run()
        {

        }
};

class Truck : public Vehicle
{
    public:
        ~Truck();
        void run()
        {

        }
};

class PoliceCar : public Car , public Emergency  //(3)
{
    private:
        bool isEmergency;

    public:
        PoliceCar(): Car(),Emergency()
        {
            this->isEmergency = false;
        }
    
        PoliceCar(bool b) : Car(),Emergency()
        {
            this->isEmergency = b;
        }

        ~PoliceCar()
        {

        }

        bool isEmergent()
        {
            return isEmergency;     //(4)
        }

        void runRedLight()
        {

        }
};

class Ambulance : public Car , public Emergency
{
    private:
        bool isEmergency;

    public:
        Ambulance(): Car(),Emergency()
        {
            this->isEmergency = false;
        }
    
        Ambulance(bool b) : Car(),Emergency()
        {
            this->isEmergency = b;
        }

        ~Ambulance()
        {

        }

        bool isEmergent()
        {
            return isEmergency;
        }

        void runRedLight()
        {

        }
};

class FireEngine : public Truck , public Emergency
{
    private:
        bool isEmergency;

    public:
        FireEngine(): Truck(),Emergency()
        {
            this->isEmergency = false;
        }
    
        FireEngine(bool b) : Truck(),Emergency()
        {
            this->isEmergency = b;
        }

        ~FireEngine()
        {

        }

        bool isEmergent()
        {
            return this->isEmergency;
        }

        void runRedLight()
        {

        }
};

class TraficControlSystem
{
    private:
        Vehicle* v[24];
        int numVehicles = 0;

    public:
        void control()
        {
            for(int i = 0; i < numVehicles; i++)
            {
                Emergency* ev = dynamic_cast<Emergency*>(v[i]);
                if(ev !=0 )
                {
                    ev->runRedLight();    //(5)
                }
                else
                {
                    v[i]->run();           //(6)
                }
            }
        }

        void add(Vehicle* vehicle)
        {
            v[numVehicles++] = vehicle;
        }

        void shutDown()
        {
            for( int i = 0; i < numVehicles; i++)
            {
                delete v[i];
            }
        }
};

int main()
{
    TraficControlSystem* tcs = new TraficControlSystem;
    tcs->add(new Car());
    tcs->add(new PoliceCar);
    tcs->add(new Ambulance());
    tcs->add(new Ambulance(true));
    tcs->add(new FireEngine(true));

    delete tcs;
    return 0;
}

答案:
(1)virtual bool isEmergent()

(2)virtual void runRedLight()

(3)public Car , public Emergency

(4)this->isEmergency

(5)ev

(6)v[i]

相关文章

网友评论

      本文标题:(九)Vehicle

      本文链接:https://www.haomeiwen.com/subject/zldordtx.html