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
代码块
# 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 ;
}
运行结果显示如下