设计哺乳动物(Mammal)-狗(Dog)一哈巴狗(Pug)的继承关系,三个类都定义Speak()虚成员函数。设计外部函数Talk()调用虚函数,参数为Mammal类引用,测试多态性。
时间: 2024-02-19 17:58:19 浏览: 261
可以将狗(Dog)类作为哺乳动物(Mammal)类的派生类,同时哈巴狗(Pug)类作为狗(Dog)类的派生类。继承关系如下:
```
class Mammal {
public:
virtual void Speak() {
cout << "Mammal speaks." << endl;
}
};
class Dog : public Mammal {
public:
virtual void Speak() {
cout << "Dog speaks." << endl;
}
};
class Pug : public Dog {
public:
virtual void Speak() {
cout << "Pug speaks." << endl;
}
};
```
接下来我们可以编写一个外部函数Talk(),参数为Mammal类的引用,用于测试多态性:
```
void Talk(Mammal& m) {
m.Speak();
}
```
现在我们可以进行测试了,代码如下:
```
int main() {
Mammal* m1 = new Mammal();
Mammal* m2 = new Dog();
Mammal* m3 = new Pug();
Talk(*m1); // output: "Mammal speaks."
Talk(*m2); // output: "Dog speaks."
Talk(*m3); // output: "Pug speaks."
delete m1;
delete m2;
delete m3;
return 0;
}
```
在Main函数中,我们分别创建了Mammal、Dog、Pug对象,并将它们的地址传递给Talk()函数进行测试。根据多态性的特性,我们可以看到输出结果是根据对象的实际类型而定的,说明多态性得到了正确的实现。
阅读全文