C++ 模板和继承,派生类中的函数未被替换

标签 c++ templates inheritance

这里我附上了一个最小的案例,在子类中,cmp 将替换父类中的那个,但是它不起作用,它总是调用父类中的那个

#include <iostream>

template <typename T>
class A
{
    public:
        void tell(T a, T b)
        {
            std::cout << (cmp (a, b) ? a : b) << " is better" << std::endl;
        }
    protected:
        bool cmp (T & a, T & b)
        {
            return a > b;
        }
};

template <typename T>
class B: public A<T>
{
    protected:
        bool cmp (T & a, T & b)
        {
            return a < b;
        }
};

int main ( int argc , char **argv ) 
{
    B<int> b;
    // should be: 3 is better here
    b.tell(5, 3);
    return 0;
}

最佳答案

您必须声明多态函数virtual。否则你不会得到多态行为

virtual bool cmp (T & a, T & b)

关于C++ 模板和继承,派生类中的函数未被替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11792955/

相关文章:

c++ - 使用 SDL_CreateRGBSurface 创建新的 SDL_Surface 时遇到困难

c++ - 为什么 opencv 发现轮廓的边界点是无序的和未完成的?

c++ - 堆大小(由 umdh 报告)和(私有(private))工作集(由任务管理器报告)之间的差异是什么?

c++ - Emacs 缩进模板类/函数

C++ 模板数组类 : Error generation depends on whether it inherits an interface or not

c# - 如何获取基类的所有继承类?

c++ - 带有模板的 lambda

C++ 模板编译错误 - 递归类型或函数依赖

jquery - jQuery 的首选模板库是什么?

javascript - 调用基类函数——JavaScript中的类继承