【发布时间】:2013-01-23 20:47:01
【问题描述】:
我读过的大多数面向对象编程的书籍都使用带有Shape.draw() 成员函数的Shape 类或带有Dog.talk() 成员函数的Dog 类或类似的东西来演示多态性的概念。现在,这对我来说一直是一个困惑的根源,这与多态性无关。
class Dog : public Animal
{
public:
...
virtual void talk() { cout << "bark! bark!" << endl; }
...
};
虽然这可能是一个简单的示例,但我无法想象在更复杂的应用程序中实现此功能的好方法,其中 Dog.talk() 可能需要访问另一个类的声音子例程,例如播放bark.mp3 而不是使用cout 进行输出。假设我有:
class Audio
{
public:
...
void playMP3(const string& filename)
...
};
在设计时从 Dog.talk() 中访问 Audio.playMP3() 的好方法是什么?将Audio.playMP3() 设为静态?传递函数指针?让Dog.talk() 返回它想要播放的文件名并让程序的另一部分处理它?
【问题讨论】:
-
dog.talk()?你们都疯了。 2.bp.blogspot.com/_mJ4lc_Q9Q6k/S1tPxznZJQI/AAAAAAAAk8s/… -
很好的问题,我希望更多的 OOP 狂热者能够正确考虑。