完善下列代码并输出结果include suing namespace std; class Pet{public:virtual stirng speak()const{return "pet!"}}; calss Dog:public Pet{public:stirng speak()const{return "dog!"}}; int main(){ Dog ralph; Pet*p1=&ralph; pet&p2=ralph; Pet p3; cout<<p1->speak()<<endl; cout<<p2.speak()<<endl; cout<<p3.speak()<<endl; return 0; }
时间: 2024-04-26 22:20:27 浏览: 50
EmployeePortal:用于注册和列出员工的员工门户
完善后的代码如下:
#include <iostream>
using namespace std;
class Pet{
public:
virtual string speak() const {
return "pet!";
}
};
class Dog : public Pet {
public:
string speak() const {
return "dog!";
}
};
int main() {
Dog ralph;
Pet* p1 = &ralph;
Pet& p2 = ralph;
Pet p3;
cout << p1->speak() << endl;
cout << p2.speak() << endl;
cout << p3.speak() << endl;
return 0;
}
输出结果为:
dog!
dog!
pet!
解释:虽然p1和p2都指向了Dog类的对象ralph,但是p1是一个指向Pet类的指针,调用speak()函数时会根据虚函数表来调用Dog类中的speak()函数,输出结果为"dog!";而p2是一个Pet类的引用,同样会根据虚函数表来调用Dog类中的speak()函数,输出结果为"dog!"。p3是一个Pet类的对象,调用speak()函数会直接调用Pet类中的speak()函数,输出结果为"pet!"。
阅读全文