【发布时间】:2015-06-09 11:27:09
【问题描述】:
我有两个班级:
template <class T>
class TArray
{
public:
TArray& operator =(const TArray &array) { return Copy(array); }
virtual TArray& Copy(const TArray &array) { ... }
}
class TString : public TArray<TCHAR>
{
public:
TString& Copy(const TString &string) { ... }
}
类也需要构造函数。
但是第二类中的方法Copy 不会覆盖第一类中的方法。
考虑这段代码:
TString a = _T("aaa");
TString b;
b = a;
在第三行程序中,在TArray 中输入赋值运算符。其中this 和array 实际上是TString 类型。但是当调用Copy 时,程序进入方法TArray::Copy,而不是我预期的TString::Copy。为什么?
我正在使用 Visual Studio 2015 RC,但我正在从 Visual Studio 6.0 项目中移动一些代码,我很确定它已经在其中工作了。有什么变化吗?
【问题讨论】:
-
这是测试覆盖的完美情况。将其添加到 TString &Copy(..) 函数并查看编译器抱怨
-
好的,你赢了。我可以在
TString中添加赋值运算符来解决这个问题,但我很好奇有没有办法从TArray调用TString::Copy?
标签: c++ templates inheritance polymorphism visual-studio-2015