#include <iostream> using namespace std; class Pet {public: virtual void speak() { cout<<"how does a pet speak?\n"; } }; class Cat: public Pet {public: void speak() { cout<<"miao~~!miao~~!\n"; } }; class Dog: public Pet {public: void speak() { cout<<"wang~~!wang~~!\n"; } }; int main() { Pet *p1,*p2,obj; Dog dog1; Cat cat1; obj=dog1; obj.speak(); p1=&cat1; p1->speak(); p2=new Dog; p2->speak(); return 0; }
时间: 2024-03-04 13:53:53 浏览: 256
这段代码定义了一个Pet类,其中包含虚函数speak(),Cat和Dog类均继承自Pet类,并重写了speak()函数。在main函数中,定义了Pet指针p1和p2,以及Pet对象obj、Dog对象dog1和Cat对象cat1。将dog1赋值给obj后,调用obj的speak()函数,会输出"wang~~!wang~~!"。将cat1的地址赋给p1后,通过p1调用speak()函数,会输出"miao~~!miao~~!"。通过new运算符动态分配了一个Dog对象,并将其地址赋给p2,通过p2调用speak()函数,同样会输出"wang~~!wang~~!"。最后释放了p2指向的动态分配的内存。
阅读全文