1. 程式人生 > >C++Primer_Chap07_類_List03_類的其他特性_筆記

C++Primer_Chap07_類_List03_類的其他特性_筆記

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;
}