gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:28:54 24 4
gpt4 key购买 nike

这里我附上了一个最小的案例,在子类中,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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com