Visual C++ - 虚拟方法未被覆盖
Visual C++ - Virtual method is not overriden
我有两个 classes:
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) { ... }
}
类 也有需要的构造函数。
但是第二个 class 中的方法 Copy
不会覆盖第一个 class 中的方法。
考虑这段代码:
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 项目中移动一些代码,我很确定它在其中工作。有什么变化吗?
您没有覆盖任何内容,因为这些方法具有不同的签名:
TArray& Copy(const TArray &array)
对
TString& Copy(const TString &string)
签名应该相同才能覆盖。在你的例子中,有两个不同的签名。
TArray& Copy(const TArray &array)
TString& Copy(const TString &string)
我有两个 classes:
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) { ... }
}
类 也有需要的构造函数。
但是第二个 class 中的方法 Copy
不会覆盖第一个 class 中的方法。
考虑这段代码:
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 项目中移动一些代码,我很确定它在其中工作。有什么变化吗?
您没有覆盖任何内容,因为这些方法具有不同的签名:
TArray& Copy(const TArray &array)
对
TString& Copy(const TString &string)
签名应该相同才能覆盖。在你的例子中,有两个不同的签名。
TArray& Copy(const TArray &array)
TString& Copy(const TString &string)