任何人都可以解釋下面代碼的輸出嗎?虛擬函數在基類中是常量而在派生中不是常量
#include <iostream>
#include <string>
class Animal
{
public:
Animal(const std::string & name) : _name(name) { }
~Animal() { }
virtual void printMessage() const
{
std::cout << "Hello, I'm " << _name << std::endl;
}
private:
std::string _name;
// other operators and stuff
};
class Cow : public Animal
{
public:
Cow(const std::string & name) : Animal(name) { }
~Cow() { }
virtual void printMessage()
{
Animal::printMessage();
std::cout << "and moo " << std::endl;
}
};
int main() {
Cow cow("bill");
Animal * animal = &cow;
cow.printMessage();
animal->printMessage();
}
輸出是
你好,我是比爾
和哞
你好,我是比爾
我不明白爲什麼。指針動物指向Cow類型的對象。 printMessage是一個虛函數。爲什麼牛類的實現不是被調用的呢?
+1爲完整的最小工作示例 – Flexo
您是否嘗試將Cow類中的函數更改爲virtual void printMessage()const? –