2011-08-09 67 views
5
template<typename T> ClassA 
{ 
    ... 
    ClassA& operator=(const ClassA&); 

    ... 
}; 

// case one: 
template<typename T> 
ClassA<T>& ClassA<T>::operator=(const ClassA &rhs) 
{ ... } 

// case two: 
template<typename T> 
ClassA<T>& ClassA<T>::operator=(const ClassA<T> &rhs) 
{ ... } 

我假定案例一是正確的。超載運算符=內部模板類

問題>爲什麼我們不必在功能參數列表中使用ClassA<T>,比如情況二?

+0

+1,因爲它是隱含的。 – iammilind

+0

我被告知「我們必須爲類模板的名稱指定模板參數,除了類本身的範圍內。這裏函數參數不在類A的範圍內,所以我認爲我們必須使用第二種情況一個「。 – q0987

+0

@iammilind:你因爲隱含而投票嗎? –

回答

0

它在函數參數範圍內(但不在返回類型中)暗示。另請參閱使用嵌套類作爲參數類型。

2

正如你所見,任何一個版本都可以工作。

一旦我們通過了ClassA<T>& ClassA<T>::operator=(const ClassA& rhs)ClassA<T>::部分,它的行爲就好像我們在課堂上一樣。例如,操作員可以訪問該班級的所有成員。

你必須指定返回值的全名,因爲那時我們還不知道這是一個成員函數(或操作符)。