els*_*ooo 0 c++ overriding subclassing
正常覆盖将以这种方式工作:
class Fruit {
public:
string color();
};
string Fruit::color() {
return "Unkown";
};
class Apple : public Fruit {
public:
string color();
};
string Apple::color() {
return "Green";
};
Run Code Online (Sandbox Code Playgroud)
现在,你称之为:
Apple *apple = new Apple();
std::cout << apple->color();
Run Code Online (Sandbox Code Playgroud)
这将输出Green,这是正确的!但是,在以下情况下运行它(当然这只是一个例子):
Apple *apple = new Apple();
printHealthy(apple);
// Method printHealthy:
void printHealthy(Fruit *fruit) {
std::cout << fruit->color();
};
Run Code Online (Sandbox Code Playgroud)
这将输出Unkown,我可以理解,因为你将Apple转换为Fruit,从而'替换'它的方法.但我怎么还能了解它的真实颜色呢?
要求:
Apple--class.将会有更多Apple的东西,在旅途中分配.Apple类(例如Tomato,它们当然有不同的名称)是它的子类Fruit.Apple哪种颜色为 "未知",因此它不会覆盖该方法,而是运行Fruit方法.virtual在基类中标记函数.
class Fruit {
public:
virtual string color();
};
Run Code Online (Sandbox Code Playgroud)