64,648
社区成员
发帖
与我相关
我的任务
分享
class Screen {
public:
//注意这个声明
friend void Window_mgr::clear(ScreenIndex);
typedef std::string::size_type pos;
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,' '){};
char get() const
{ return contents[cursor];}
inline char get(pos ht,pos wd) const;
inline Screen &move(pos r, pos c);
Screen &set(char c);
Screen &set(pos ht,pos wd,char c);
Screen &display(std::ostream &os) {
do_display(os);
return *this;
}
const Screen &display(std::ostream &os) const {
do_display(os);
return *this;
}
private:
pos cursor = 0;
pos height = 0, width = 0;
std::string contents;
void do_display(std::ostream &os) const{
os<<contents;
}
};
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{
public:
using ScreenIndex = std::vector<Screen>::size_type;
void clear(ScreenIndex);
private:
//注意这里,如果没有这个private的话我就能搞定了
std::vector<Screen> screens{Screen(24, 80, ' ')};
};
void Window_mgr::clear(ScreenIndex i) {
Screen &s=screens[i];
s.contents =std::string(s.height*s.width,' ');
}
就这个方法来说,我觉着contents是private的应该没啥问题。是不是遇到这种情况就是类的设计有问题?[/quote]
明显改成public void cliear(void); 这样不是更简洁.......
void Window_mgr::clear(ScreenIndex i) {
Screen &s=screens[i];
s.contents =std::string(s.height*s.width,' ');
}
就这个方法来说,我觉着contents是private的应该没啥问题。是不是遇到这种情况就是类的设计有问题?