*this返回的是调用本函数的对象的引用,返回的是函数本身,而非对象的副本。
在const成员函数中返回*this,返回的是一个常量引用,无法对对象的成员再做改变。
class Screen {
public:
//pos
typedef string::size_type pos;
//构造函数
//1默认构造函数
Screen() = default;
//接受高、宽、字符三个量来创建窗口。
Screen(pos ht, pos wd, char c) :height(ht),width(wd),
contents(ht*wd,c){}
//接受高、宽两个参数来创建空白窗口
Screen(pos ht, pos wd) :height(ht), width(wd),
contents(ht*wd,' ') {}
Screen& set(char);
Screen& set(pos, pos, char);
char get() const
{
return contents[cursor];
}
inline char get(pos ht, pos wd) const;
Screen& move(pos r, pos c);
Screen& display(ostream &os) {
do_display(os); return *this;
}
const Screen& display(ostream& os) const {
do_display(os); return *this;
}
private:
pos cursor = 0;
pos height = 0, width = 0;
string contents;
void do_display(ostream& os) const { for (pos i = 0; i < width * height; ++i) {
if (i % width == 0) cout << endl;
cout << contents[i];
} }
};
inline
Screen& Screen::move(pos r, pos c) {
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];
}
class Window_mgr {
private:
vector<Screen> screens{ Screen(24,80,'a') };
};
inline Screen& Screen::set(char c) {
contents[cursor] = c;
return *this;
}
inline Screen& Screen::set(pos r, pos col, char ch) {
contents[r * width + col] = ch;
return *this;
}