|
发表于 2023-5-6 20:46:49
|
显示全部楼层
本楼为最佳答案
在C++中,基类(如Animal)的行为在子类(如Pig)中的调用并不是必须的。这取决于你想如何设计你的类继承关系和行为。在你提供的例子中,调用基类的 eat() 函数是为了保留基类的行为,并在子类中添加额外的行为。
以下是一个用黄鱼的例子来解释这个概念:
- #include <iostream>
- class Animal {
- public:
- virtual void eat() {
- std::cout << "我是动物,我需要吃东西。" << std::endl;
- }
- };
- class YellowFish : public Animal {
- public:
- void eat() override {
- Animal::eat(); // 调用基类的eat()方法
- std::cout << "我是黄鱼,我吃小虫子。" << std::endl;
- }
- };
- int main() {
- YellowFish fish;
- fish.eat();
- return 0;
- }
复制代码
在这个例子中, YellowFish 类覆盖了基类 Animal 的 eat() 方法,并在其中调用了基类的 eat() 方法。这样,当你调用 YellowFish 的 eat() 方法时,会先输出基类的内容,然后输出子类的内容。运行结果如下:
但是,如果你不想保留基类的行为,你可以在子类中完全覆盖基类的 eat() 方法,而不调用基类的 eat() 方法,如下所示:
- class YellowFish : public Animal {
- public:
- void eat() override {
- // 不调用基类的eat()方法
- std::cout << "我是黄鱼,我吃小虫子。" << std::endl;
- }
- };
复制代码
总之,基类的行为在子类中的调用取决于你的设计需求。如果你希望子类在保留基类的行为的基础上添加额外的行为,那么在子类中调用基类的方法是有意义的。如果你希望子类完全覆盖基类的行为,那么就不需要调用基类的方法。 |
|