作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
下面的代码是用 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/
我有一个特别的问题想要解决,我不确定是否可行,因为我找不到任何信息或正在完成的示例。基本上,我有: class ParentObject {}; class DerivedObject : publi
在我们的项目中,我们配置了虚 URL,以便用户可以在地址栏中输入虚 URL,这会将他们重定向到原始 URL。 例如: 如果用户输入'http://www.abc.com/partner ',它会将它们
我是一名优秀的程序员,十分优秀!