美文网首页
(九)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