马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用黄鱼的例子来说把。
Animal基类里有eat() 行为,子类Pig也有eat()行为,封装的时候void Pig::eat()
{
Animal::eat();
std::cout << "我吃猪肉" <<std::endl;
}
这个基类的行为调用是否是必须的?如果是必须的请说明下原因。谢谢。
在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;
}
};
总之,基类的行为在子类中的调用取决于你的设计需求。如果你希望子类在保留基类的行为的基础上添加额外的行为,那么在子类中调用基类的方法是有意义的。如果你希望子类完全覆盖基类的行为,那么就不需要调用基类的方法。
|