我有兩個類:的Visual C++ - 虛擬方法不重寫
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(..)函數並查看編譯器抱怨 – marom
您可以查看[Covariance_and_contravariance](http://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science))。 – Jarod42
好的,你贏了。我可以在'TString'中添加賦值操作符來解決這個問題,但我很好奇有沒有辦法從'TArray'調用'TString :: Copy'? –