int main() { Animal* animal1 = new Animal(); Animal* animal2 = new Dog(); Animal* animal3 = new Cat(); animal1->speak(); // 输出"This is an animal speaking." animal2->speak(); // 输出"Woof! Woof!" animal3->speak(); // 输出"Meow! Meow!" delete animal1; delete animal2; delete animal3; return 0; }能解释一下这段代码
时间: 2024-02-02 16:03:25 浏览: 21
这段代码演示了多态的概念。Animal是一个基类,而Dog和Cat是Animal的派生类。在main函数中,首先创建了一个Animal类的对象animal1,然后创建了一个指向Dog类的指针animal2,最后创建了一个指向Cat类的指针animal3。由于Dog和Cat都是Animal的子类,所以可以通过它们的基类指针进行访问。
在调用speak()函数时,由于它是虚函数,所以会根据指针指向的对象类型来调用相应的函数。因此,animal1->speak()调用的是Animal类中的speak()函数,输出"This is an animal speaking.",而animal2->speak()和animal3->speak()则分别调用了Dog类和Cat类中的speak()函数,输出"Woof! Woof!"和"Meow! Meow!"。
最后,通过delete释放了动态分配的内存。