C++ Primer(第5版) 练习 7.27
练习 7.27 给你自己的Screen类添加move、set和display函数,通过执行下面的代码检验你的类是否正确。
Screen myScreen(5, 5, 'X');
myScreen.move(4, 0).set('#').display(cout);
cout<<"\n";
myScreen.display(cout);
cout<<"\n";
环境:Linux Ubuntu(云服务器)
工具:vim
代码块
/*************************************************************************> File Name: ex7.27.cpp> Author: > Mail: > Created Time: Thu 15 Feb 2024 09:18:54 PM CST************************************************************************/#include<iostream>
using namespace std;class Screen{public:using pos = string::size_type;Screen() = default;Screen(pos ht, pos wd): height(ht), width(wd), contents(20, ' ') {}Screen(pos ht, pos wd, char c): height(ht), width(wd), contents(ht * wd, c) {}char get() const;char get(pos ht, pos wd) const;Screen &move(pos r, pos c);Screen &set(char c);Screen &set(pos ht, pos wd, char c);Screen &display(ostream &output);const Screen &display(ostream &output) const;private:void do_display(ostream &output) const { output<<contents; }pos cursor = 0;pos height = 0;pos width = 0;string contents;
};inline char Screen::get() const{return contents[cursor];
}inline char Screen::get(pos ht, pos wd) const{pos row = ht * width;return contents[row + wd];
}inline Screen &Screen::move(pos r, pos c){pos row = r * width;cursor = row = c;return *this;
}inline Screen &Screen::set(char c){contents[cursor] = c;return *this;
}inline Screen &Screen::set(pos ht, pos wd, char c){contents[ht * width + wd] = c;return *this;
}inline Screen &Screen::display(ostream &output){do_display(output);return *this;
}inline const Screen &Screen::display(ostream &output) const{do_display(output);return *this;
}int main(){Screen myScreen(5, 5, 'X');myScreen.move(4, 0).set('#').display(cout);cout<<"\n";myScreen.display(cout);cout<<"\n";return 0;
}