编写一个哺乳动物类mammal,再由此派生出狗类dog,二者都声明spark()成员函数,该函数在基类中被声明为虚函数。声明一个dog类的对象,通过此对象调用spark()函数,观察运行结果。
时间: 2023-04-28 20:04:07 浏览: 252
好的,以下是中文回复:
首先,我们需要编写一个哺乳动物类mammal,其中包含一个虚函数spark():
```
class mammal {
public:
virtual void spark() {
cout << "哺乳动物在闪电中发出火花!" << endl;
}
};
```
然后,我们需要派生出一个狗类dog,同样包含一个spark()函数:
```
class dog : public mammal {
public:
void spark() {
cout << "狗在闪电中发出火花!" << endl;
}
};
```
最后,我们声明一个dog类的对象,并通过此对象调用spark()函数:
```
int main() {
dog myDog;
myDog.spark();
return 0;
}
```
运行结果应该是:
```
狗在闪电中发出火花!
```
因为我们在dog类中重写了spark()函数,所以调用对象的spark()函数时,会调用dog类中的版本。如果我们没有在dog类中重写spark()函数,那么调用对象的spark()函数时,会调用基类mammal中的版本。
相关问题
编写一个哺乳动物类Mammal,再由此派生出狗类Dog,二者都声明speak()成员函数,该函数在基类中被声明为虚函数。声明一个Dog类的对象,通过此对象调用speak函数,观察运行结果。再设计一个函数,形参使用Mammal的指针或者引用,实参传入Dog类型,观察函数内部speak()的调用情况
好的,下面是代码实现:
```c++
#include <iostream>
using namespace std;
class Mammal {
public:
virtual void speak() {
cout << "Mammal speak()" << endl;
}
};
class Dog : public Mammal {
public:
void speak() {
cout << "Dog speak()" << endl;
}
};
void test(Mammal& m) {
m.speak();
}
int main() {
Dog d;
d.speak();
Mammal* ptr = &d;
ptr->speak();
Mammal& ref = d;
ref.speak();
test(d);
return 0;
}
```
在这个示例中,我们定义了一个基类 `Mammal` 和一个派生类 `Dog`,`Mammal` 中声明了一个虚函数 `speak()`,在 `Dog` 中重写了这个函数。
在 `main()` 函数中,我们声明了一个 `Dog` 类的对象 `d`,并调用了它的 `speak()` 函数,输出了 `Dog speak()`。接着,我们用基类指针 `ptr` 和基类引用 `ref` 分别指向 `d`,并调用它们的 `speak()` 函数,输出的依然是 `Dog speak()`,这是由于虚函数的作用,使得在运行时能够动态绑定,调用派生类的函数。
最后,我们定义了一个函数 `test()`,它的形参是 `Mammal` 类型的引用,实参是 `Dog` 类型的对象 `d`。在函数内部调用了 `speak()` 函数,输出的是 `Dog speak()`。因为 `test()` 函数的形参是基类类型的引用,但是实参是派生类类型的对象,所以在函数内部调用的依然是派生类的函数,这也是多态性的体现。
声明一个哺乳动物 Mammal 类,再由此派生出狗 Dog 类,二者都定义speak()成员函数,基类中定义为虚函数。声明一个 Dog 类的对象,调用speak()函数,观察运行结果。
好的,这是一个典型的面向对象编程问题。以下是代码示例:
```cpp
#include <iostream>
using namespace std;
class Mammal {
public:
virtual void speak() {
cout << "Mammal speaks!" << endl;
}
};
class Dog : public Mammal {
public:
void speak() {
cout << "Dog barks!" << endl;
}
};
int main() {
Dog myDog;
myDog.speak();
return 0;
}
```
运行结果应该是:
```
Dog barks!
```
希望这个回答能够帮到你!
阅读全文