多重继承钻石

Multiple inheritance diamond

本文关键字:钻石 多重继承      更新时间:2023-10-16

这是代码:

   class Vehicle {
     public :
       Vehicle () { 
              cout << " Vehicle Constructor " << endl ;
                  }
       virtual ~ Vehicle () {
              cout << " Vehicle Destructor " << endl ;
                             }
       virtual void accelerate () {
              cout << " Vehicle Accelerating " << endl ;
                                   }   
       void setAcceleration ( double a ) {
              acceleration = a;
                                         }
       double getAcceleration () {
              return acceleration ;
                                  }
       protected :
              double acceleration ;
      };
      class Car : public Vehicle {
       public :
       Car () {
              cout << " Car Constructor " << endl ;
               }
       virtual ~ Car () {
              cout << " Car Destructor " << endl ;
                         }
       virtual void accelerate () {
             cout << " Car Accelerating " << endl ;
                                  }
       virtual void drive () {
             cout << " Car Driving " << endl ;
                             }
       };
      class Jet : public Vehicle {
      public :
       Jet () {
             cout << " Jet Constructor " << endl ;
               }
       virtual ~ Jet () {
              cout << " Jet Destructor " << endl ;
                        }
       virtual void fly () const {
             cout << " Jet flying " << endl ;
                       }
                };
       class JetCar : public Car , public Jet {
       public :
       JetCar () {
              cout << " JetCar Constructor " << endl ;
               }
       virtual ~ JetCar () {
              cout << " JetCar Destructor " << endl ;
                    }
       virtual void drive () {
              cout << " JetCar driving " << endl ;
                             }
       virtual void fly () {
              cout << " JetCar flying " << endl ;
                           }
       };
       void analyzeCarPerformance ( Car * testVehicle ) {
              testVehicle -> drive () ;
                 }
       void analyzeJetPerformance ( Jet * testVehicle ) {
                testVehicle -> fly () ;
                  }
     int main () {
       Car myCar ;
       Jet myJet ;
       JetCar myJetCar ;
       cout << endl << endl ;
       cout << " Car testing in progress " << endl ;
       analyzeCarPerformance (& myCar );
       analyzeCarPerformance (& myJetCar ) ;
       cout << " Jet testing in progress " << endl ;
       analyzeJetPerformance (& myJet );
       analyzeJetPerformance (& myJetCar ) ;
       cout << endl << endl ;
       return 0;
      }

总的来说,当我调用函数analyzeJetPerformance (& myJetCar )编译器给我Jat flying没有JetCar flying我所期望的。这里有什么问题?

在 Jet 中,您有以下内容:

   virtual void fly () const {
         cout << " Jet flying " << endl ;
                   }

在捷车中,您有:

   virtual void fly () {
          cout << " JetCar flying " << endl ;
                       }

这些不是相同的功能。使函数声明相同,它应该可以工作。