gpt4 book ai didi

c++ - 模板子类覆盖父类的虚函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:03 30 4
gpt4 key购买 nike

下面的代码是用 gcc v4.3.3 编译的,模板化的子类似乎覆盖了父类中的虚函数,但这是否违反了不能有虚模板函数的规则?还是发生了其他我不明白的事情?

class BaseClass
{
public:
virtual void Func(int var)
{
std::cout<<"Base int "<<var<<std::endl;
}

virtual void Func(double var)
{
std::cout<<"Base double "<<var<<std::endl;
}
};

template <class TT>
class TemplateClass : public BaseClass
{
public:
using BaseClass::Func;
virtual void Func(TT var)
{
std::cout<<"Child TT "<<var<<std::endl;
}
};

int main(int argc, char **argv)
{
BaseClass a;
TemplateClass<int> b;
BaseClass *c = new TemplateClass<int>;

int intVar = 3;
double doubleVar = 5.5;

a.Func(intVar);
a.Func(doubleVar);
b.Func(intVar);
b.Func(doubleVar);
c->Func(intVar);
c->Func(doubleVar);
delete c;
}

然后输出:

基数 3
基础双5.5
child TT 3
基础双5.5
child TT 3
基础双5.5

正如我所希望的那样,但我不确定它为什么会起作用。

最佳答案

类模板可以有虚成员函数。

成员函数模板不能是虚拟的。也就是说,以下是无效的:

class C
{
public:
template <typename T>
virtual void f();
};

另外,如果派生类有一个与基类中的虚函数同名的成员函数模板,它不会重写虚函数。所以,如果 TemplateClass::Func 是一个成员函数模板,例如,

template <typename T>
void Func(T var) { /* ... */ }

它不会覆盖 BaseClass::Func

关于c++ - 模板子类覆盖父类的虚函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2778352/

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