Bjarne:必須在類聲明處賦予數據嗎

字號:

不必,如果一個接口不需要數據時,無須在作為接口定義的類中賦予數據。代之以在派生類中給出它們。參見“為什么編譯要花這么長的時間?”。
    有時候,你必須在一個類中賦予數據??紤]一下復數類的情況:
    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化都是必要的。