下面的代碼使用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;
}
這然後輸出:
基地INT 3
基雙5.5
兒童TT 3
基雙5.5
兒童TT 3
基雙5.5
如我希望,但我不確定它爲什麼起作用。
我現在看到我對模板類與模板函數的混淆。因此,在上面的代碼中,TemplateClass正在編譯時創建一個虛擬的Func(int),然後覆蓋父類的虛函數(int) –
user334066
2010-05-06 17:13:41
@user:完全正確。 – 2010-05-06 17:24:49