【问题描述】声明一个哺乳动物类Mammal,再由此派生出狗类Dog, 自行根据需要定义相关的成员,达到以下要求: (1)达到以上题目所规定的类族要求,合理写出构造函数和析构函数。 (2)编制一个名为creating的函数,在该函数实现中声明一个Dog类的对象,实现对象的speak()函数的调用 (3)编制主函数,在主函数中调用creating函数,调用结束后观察基类与派生类的构造函数与析构函数的调用顺序。【输入形式】无输入。 【输出形式】分别输出对应类的构造函数和析构函数的调用信息 【样例输入】无输入 【样例输出】 Mammal constructor Dog constructor wang wang Dog constructor Mammal constructor
时间: 2024-03-01 21:50:14 浏览: 98
以下是代码实现:
```c++
#include<iostream>
using namespace std;
class Mammal{
public:
Mammal(){
cout<<"Mammal constructor"<<endl;
}
virtual void speak(){
cout<<"Mammal speaks"<<endl;
}
~Mammal(){
cout<<"Mammal destructor"<<endl;
}
};
class Dog:public Mammal{
public:
Dog(){
cout<<"Dog constructor"<<endl;
}
void speak(){
cout<<"wang wang"<<endl;
}
~Dog(){
cout<<"Dog destructor"<<endl;
}
};
void creating(){
Dog myDog;
myDog.speak();
}
int main(){
creating();
return 0;
}
```
输出结果如下:
```
Mammal constructor
Dog constructor
wang wang
Dog destructor
Mammal destructor
```
可以看到,当我们调用creating函数时,先调用了Dog类的构造函数,然后输出了“wang wang”(即调用了Dog类的speak函数),最后调用了Dog类和Mammal类的析构函数(析构函数的调用顺序与构造函数的调用顺序相反)。这说明了Mammal类是Dog类的基类,Dog类继承了Mammal类的属性和方法。
阅读全文