【发布时间】:2012-03-08 11:58:18
【问题描述】:
在熟悉了基本类和封装的概念后,我开始着手理解多态性,但我不知道如何让它发挥作用。我搜索过的许多示例都被认为是真的,真的强制(类 Foo 和 Bar 对我来说太抽象了,看不到实用程序),但这是我对基本概念的理解:你编写一个基类,从中派生一大堆其他东西来改变基本方法做的内容(但不是它们“是”什么),然后你可以编写通用函数来接受和处理任何派生类,因为您已经在某种程度上标准化了它们的外观。在这个前提下,我尝试像这样实现基本的 Animal->cat/dog 层次结构:
class Animal {
public:
virtual void speak() = 0;
};
class Dog : public Animal {
public:
void speak() {cout << "Bark bark!" << endl;}
};
class Cat : public Animal {
public:
void speak() {cout << "Meow!" << endl;}
};
void speakTo(Animal animal) {
animal.speak();
}
speakTo 可以带的地方可以带一种一般的动物,让它说话。但据我了解,这不起作用,因为我无法实例化 Animal(特别是在函数参数中)。那么我问,我是否了解多态性的基本用途,我该如何真正做我尝试做的事情?
【问题讨论】:
标签: c++ inheritance polymorphism abstract-class