1. 程式人生 > >類的一些預設成員函式

類的一些預設成員函式

 

//1.編譯器為我們實現了哪些類成員函式

class Empty {};

//C++ 98 會有如下函式
    public:
        Empty2() {} //預設建構函式

        Empty2(const Empty2&) {}//預設複製建構函式

        Empty2& operator = (const Empty2&) { return *this; }//預設=過載

        inline ~Empty2() {}//析構




//2.編譯器為我們實現了哪些類成員函式  

class AnotherEmpty : public Empty {};
//C++ 98 會有如下函式

    public:
        AnotherEmpty() : Empty() {} //預設建構函式,會呼叫基類的建構函式

        AnotherEmpty(const AnotherEmpty&) {}//預設複製建構函式

        AnotherEmpty& operator = (const AnotherEmpty&) { return *this; }//預設=過載

        inline ~AnotherEmpty() {}//析構




//3.編譯器為我們實現了哪些類成員函式  

class NotEmpty {
    public:
        NotEmpty(int a) : m_value(a) {}
    private:
        int m_value;
};

//C++ 98 會有如下函式

    public:
        NotEmpty(const NotEmpty&) {}//預設複製建構函式

        NotEmpty& operator = (const NotEmpty&) { return *this; }//預設=過載

        inline ~NotEmpty() {}//析構

//當存在建構函式時,就不會生成預設建構函式


//引申:
std::map<int, NotEmpty> m;
m[1] = NotEmpty(10);
//此處會編譯錯誤,對於map中括號的操作:
//首先會在1處看是否存在這個值,如果有返回其引用
//如果沒有,則會呼叫預設建構函式即NotEmpty()然後插入,
//但是此時的NotEmpty沒有NotEmpty()這個建構函式