how can I use an inherited method and the same base class method?
假设我有一个阶级动物和一个继承动物的阶级狗。比如说,我想调用一个名为'eat()'的方法,这个方法是狗特有的,但是所有动物之间都有一些共享的eat代码,所以我知道我可以使'eat()'成为虚拟的,但是它不会使用基类代码,比如说,我应该调用我的基类'eat all()',然后特定动物的每个eat方法都必须调用它吗?只是想找最好的设计。这是在C++中
这是经典的模板方法模式。基本上:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Animal { void Eat() { //stuff specific to all animals SpecificEat(); } virtual void SpecificEat() = 0; }; class Dog : Animal { virtual void SpecificEat() { //stuff specific to dog } }; |
使用这种方法,您不必在派生类的重写中显式调用基类方法。它由非
我建议您的基类接口有钩子来调用派生类型的特定功能。这称为模板方法模式。下面是一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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! "; } }; class Human : public Animal { virtual void do_eat() { std::cout <<"Pizza! "; } }; |
只需调用基类的方法。
1 2 3 4 5 6 7 8 9 | class Dog : public Animal { public : void Eat() { // .. MAGIC Animal::Eat(); } }; |
请注意,如果您的动物类的