我有两个班级:
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项目移动一些代码,我很确定它已经在其中工作了。有什么变化吗?
答案 0 :(得分:5)
你没有覆盖任何东西,因为这些方法有不同的签名:
TArray& Copy(const TArray &array)
VS
TString& Copy(const TString &string)
答案 1 :(得分:1)
覆盖的签名应该相同。在您的情况下,有两种不同的签名。
TArray& Copy(const TArray &array)
TString& Copy(const TString &string)