Visual C ++ - 不覆盖虚方法

时间:2015-06-09 11:27:10

标签: c++ templates inheritance polymorphism visual-studio-2015

我有两个班级:

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中输入赋值运算符。其中thisarray实际上属于TString类型。但是当调用Copy时,程序按照我的预期输入方法TArray :: Copy,而不是TString :: Copy。为什么呢?

我正在使用Visual Studio 2015 RC,但我正在从Visual Studio 6.0项目移动一些代码,我很确定它已经在其中工作了。有什么变化吗?

2 个答案:

答案 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)