声明一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都定义Speak()成员函数,基类中定义为虚函数,声明类Dog的一个对象,调用函数Speak()

 #include <iostream.h>
#include <string.h>
class Mammal
{
protected:
 char name[10];
public:
 virtual void set()
 {
  strcpy(name,"哈哈");
 
 }
 virtual void speak()
 {
  cout<<"这是哺乳动物"<<endl;
 }
};
class Dog:public Mammal
{
public:
 void set()
 {
       strcpy(name,"哈哈");
 }
 void speak()
 {
  cout<<"这是哺乳动物:狗"<<endl;
 
 }
};
void fun(Mammal &s)
{
   s.speak();
}
void main()
{
 Mammal m1;
 Dog d2;
 fun(m1);
 fun(d2);
}
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,以下是文回复: 题目要求我们定义一个哺乳动物mammal,并由此派生出狗dog二者都要定义speak()成员函数,其基类定义虚函数。最后,我们需要定义一个dog对象,并调用speak函数,观察运行结果。 首先,我们需要定义mammal,代码如下: ``` class mammal { public: virtual void speak() { cout << "I am a mammal." << endl; } }; ``` 在这个,我们定义一个虚函数speak(),并在其输出了一句话。 接下来,我们需要派生出狗dog,代码如下: ``` class dog : public mammal { public: void speak() { cout << "I am a dog." << endl; } }; ``` 在这 ### 回答2: 在面向对象编程一个可以继承另一个的特性并添加自己的特性,这就是继承。本题要求定义一个哺乳动物mammal,并由此派生出狗dog二者定义speak()成员函数,其基类定义虚函数。接下来,要定义一个dog对象,并调用其speak函数,观察运行结果。 首先,定义mammal: ``` class mammal { public: virtual void speak() { cout << "This is a mammal." << endl; } }; ``` 在这个,我们定义一个虚函数speak(),因为我们不知道它将来会被什么样的子覆盖重写。mammal没有其他特殊的属性或方法,只是作为狗基类。 接着,定义dog,它是由mammal派生出来的: ``` class dog : public mammal { public: void speak() { cout << "This is a dog." << endl; } }; ``` dog继承了mammal的所有公有属性和方法,并且重写了speak()方法。我们可以看到,dogspeak()方法的输出与基类不同。 最后,定义一个dog对象并调用其speak函数,观察运行结果: ``` int main() { dog myDog; myDog.speak(); return 0; } ``` 运行结果是: ``` This is a dog. ``` 我们可以看到,输出的结果与我们期望的一样。这是因为我们在dog重写了speak()方法,并且由于它是从mammal继承而来的,它仍然是虚函数。因此,在调用speak()时,程序会在运行时动态地查找并调用最适合的方法,也就是dogspeak()方法。这就是多态的实现。 ### 回答3: 哺乳动物和狗都属于动物的范畴,而哺乳动物则是狗的父,所以在定义哺乳动物之后,我们可以通过继承来派生出狗类,再在狗重载基类成员函数。 首先,我们定义哺乳动物,命名为Mammal,并在其定义一个虚函数speak()。 ```c++ class Mammal { public: virtual void speak() { std::cout << "This is a mammal speaking.\n"; } }; ``` 接下来,我们派生出狗类Dog,并在其重载基类speak()函数以实现狗叫的特效。 ```c++ class Dog : public Mammal { public: virtual void speak() { std::cout << "This is a dog speaking. Woof woof!\n"; } }; ``` 现在,我们可以调用Dog对象speak()函数,观察程序的运行结果。 ```c++ int main() { Dog dog; dog.speak(); return 0; } ``` 程序的输出结果如下所示: ``` This is a dog speaking. Woof woof! ``` 由此可见,基类虚函数可以被子所重载,从而实现不同的功能。当我们调用子对象重载后的函数时,程序将执行子speak()函数而不是基类的函数,这就是C++的多态性的体现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值