答案 0 :(得分:5)
这是经典的template method pattern。基本上是:
class Animal
{
void Eat()
{
//stuff specific to all animals
SpecificEat();
}
virtual void SpecificEat() = 0;
};
class Dog : Animal
{
virtual void SpecificEat()
{
//stuff specific to dog
}
};
使用此方法,您不必在派生类的覆盖中显式调用基类方法。它由非virtual
Eat()
自动调用,具体功能由virtual SpecificEat()
实现。
答案 1 :(得分:4)
我建议你的基类接口有钩子来调用派生类型的特定功能。这被称为template method pattern.这是一个例子:
class Animal
{
public:
void eat()
{
std::cout << "Mmmm... It's ";
do_eat();
}
private:
virtual void do_eat() = 0;
};
class Dog
: public Animal
{
virtual void do_eat()
{
std::cout << "Dog Food!\n";
}
};
class Human
: public Animal
{
virtual void do_eat()
{
std::cout << "Pizza!\n";
}
};
答案 2 :(得分:2)
只需调用基类'方法。
class Dog : public Animal
{
public :
void Eat()
{
// .. MAGIC
Animal::Eat();
}
};
请注意,如果您的Animal类的Eat
方法是纯虚拟的(我怀疑),则不会链接。