我读过的大多数关于面向对象编程的书都使用了Shape带有Shape.draw()成员函数的Dog类或带有成员函数的类Dog.talk()或类似的东西来演示多态的概念.现在,这对我来说是一个混乱的根源,这与多态性无关.
class Dog : public Animal
{
public:
...
virtual void talk() { cout << "bark! bark!" << endl; }
...
};
Run Code Online (Sandbox Code Playgroud)
虽然这可能只是一个简单的例子,但我无法想象一个好的方法可以让它在一个更复杂的应用程序中运行,其中Dog.talk()可能需要访问另一个类的声音子程序,例如玩bark.mp3而不是使用cout输出.比方说我有:
class Audio
{
public:
...
void playMP3(const string& filename)
...
};
Run Code Online (Sandbox Code Playgroud)
什么是Audio.playMP3()在设计时从Dog.talk()内部访问的好方法?做Audio.playMP3()静电?传递函数指针?已经Dog.talk()返回它想打,让程序处理它的另一部分文件名?