類的一些預設成員函式
阿新 • • 發佈:2018-12-09
//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()這個建構函式