C++Primer_Chap07_類_List03_類的其他特性_筆記
阿新 • • 發佈:2018-12-09
class Screen { public: typedef std::string::size_type pos; //using pos = std::string::size_type; Screen() = default; Screen(pos ht, pos wd, char c):height(ht), width(ws), contents(ht * wd,c){} //Fills the string with ht * w consecutive copies of character c. char get() const //讀取游標處的字元 { return contents[cursor]; } //隱式內聯 inline char get(pos ht, pos wd) const; //顯示內聯 Screen &move(pos r, pos c); //定義時設定為內聯 private: pos cursor = 0; pos height = 0; pos width = 0; std::string contents; }; inline Screen &Screen::move(pos r, pos c) const { pos row = r * width; cursor = row + c; return *this; } char Screen::get(pos r, pos c) const { pos row = r * width; return contents[row + c]; }
定義在類內部的函式自動inline,可以在類內部把inline作為宣告的一部分顯示宣告成員函式,也可以在類的外部用inline關鍵字修飾函式的定義。
class Window_mgr
{
private:
std::vector<Screen> screens{Screen(24, 80, ' ')};
}
可變資料成員
可以通過在變數的宣告中加入mutable關鍵字使可以在一個const成員函式中修改類的某個資料成員。mutable data member永遠不會是const,即使它是const物件的成員。
class Screen { public: void some_member() const; private: mutable size_t access_ctr; }; void Screen::some_member() const { ++access_ctr; }