不必,如果一個接口不需要數據時,無須在作為接口定義的類中賦予數據。代之以在派生類中給出它們。參見“為什么編譯要花這么長的時間?”。
有時候,你必須在一個類中賦予數據??紤]一下復數類的情況:
template class complex {
public:
complex() : re(0), im(0) { }
complex(Scalar r) : re(r), im(0) { }
complex(Scalar r, Scalar i) : re(r), im(i) { }
// ...
complex& operator+=(const complex& a)
{ re+=a.re; im+=a.im; return *this; }
// ...
private:
Scalar re, im;
};
設計這種類型的目的是將它當做一個內建(built-in)類型一樣被使用。在聲明處賦值是必須的,以保證如下可能:建立真正的本地對象(genuinely local objects)(比如那些在棧中而不是在堆中分配的對象),或者使某些簡單操作被適當地inline化。對于那些支持內建的復合類型的語言來說,要獲得它們提供的效率,真正的本地對象和inline化都是必要的。
有時候,你必須在一個類中賦予數據??紤]一下復數類的情況:
template
public:
complex() : re(0), im(0) { }
complex(Scalar r) : re(r), im(0) { }
complex(Scalar r, Scalar i) : re(r), im(i) { }
// ...
complex& operator+=(const complex& a)
{ re+=a.re; im+=a.im; return *this; }
// ...
private:
Scalar re, im;
};
設計這種類型的目的是將它當做一個內建(built-in)類型一樣被使用。在聲明處賦值是必須的,以保證如下可能:建立真正的本地對象(genuinely local objects)(比如那些在棧中而不是在堆中分配的對象),或者使某些簡單操作被適當地inline化。對于那些支持內建的復合類型的語言來說,要獲得它們提供的效率,真正的本地對象和inline化都是必要的。

