多重继承钻石

时间:2012-05-14 23:29:02

标签: c++ virtual-inheritance

以下是代码:

   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我期望的内容。这有什么问题?

1 个答案:

答案 0 :(得分:2)

在Jet中你有以下几点:

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

在JetCar中你有:

   virtual void fly () {
          cout << " JetCar flying " << endl ;
                       }
那些功能不一样。使函数声明相同,它应该工作。