#include <iostream>
class Vehicle {
public:
void greet() {
std::cout << "Hello, I'm a vehicle";
}
};
class Car : public Vehicle {
public:
void greet() {
std::cout << "Hello, I'm a car";
}
};
class Bike : public Vehicle {
public:
void greet() {
std::cout << "Hello, I'm a bike";
}
};
void receiveVehicle(Vehicle vehicle) {
vehicle.greet();
}
int main() {
receiveVehicle(Car());
return 0;
}
正如你可以看到覆蓋的方法,我試圖Vehicle
類型的參數發送給一個函數,調用greet()
。關於調用一個子類當一個轉換到其超
Car
和Bike
是Vehicle
的子類。他們覆蓋greet()
。
但是,我收到「你好,我是車輛」。
我想,這是因爲接收receiveVehicle
類型Vehicle
,而不是一個特定的子類像Car
或Bike
的參數。但這就是我想要的:我希望這個函數能夠與Vehicle
的任何子類一起工作。
爲什麼我沒有得到預期的輸出?
除了您的答案,該方法必須在基類中聲明爲虛擬。 OP的代碼丟失了。 –
@DiegoGiagio的確如此,謝謝。 – Kal