提问者:小点点

C++中的函数重载与继承


假设我有公开派生自基类Dog的类Bulldog和Labrador,并且我有一个函数,例如一个不同类的方法,称为reward,我希望它为Dog和Bulldog类的对象,或者为Bulldog和Labrador类的对象,产生不同的结果。 对于C++开发人员来说,最好的方法是什么?

我明白,如果Dog有任何虚函数,那么我可以为此使用dynamic_cast。 这是你推荐的东西吗? 如果没有,你认为最好的办法是什么?


共1个答案

匿名用户

直接的方法是使用多态性将奖励(const dog&;dog)函数(自由函数/其他类)委托给dog接口的虚拟函数,使用提供的dog引用,该引用可以多态地分派虚拟dog方法。 例如:

#include <iostream>

struct Dog {
    Dog() {}
    virtual ~Dog() {}
    virtual void reward() const { 
        std::cout << "Default dog reward.\n"; 
    }
};

struct Bulldog : public Dog {
    Bulldog() {}
    ~Bulldog() override {}
    void reward() const override {
        std::cout << "Bulldog reward.\n"; 
    }
};

void reward(const Dog& dog) {
    dog.reward();    
}

int main() {
    reward(Dog{});     // Default dog reward.
    reward(Bulldog{}); // Bulldog reward.
    return 0;
}

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|函数|重载|继承)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?