补充Sales_data没有体现出的其他类特性

Screen.h

 1 #include <string>
2 #include <iostream>
3
4 class Screen {
5 public:
6 typedef std::string::size_type pos;
7 #if defined(IN_CLASS_INITS) && defined(DEFAULT_FCNS)
8 Screen() = default; // needed because Screen has another constructor
9 #else
10 Screen(): cursor(0), height(0), width(0) { }
11 #endif
12 // cursor initialized to 0 by its in-class initializer
13 Screen(pos ht, pos wd, char c): height(ht), width(wd),
14 contents(ht * wd, c) { }
15 friend class Window_mgr;
16 Screen(pos ht = 0, pos wd = 0):
17 cursor(0), height(ht), width(wd), contents(ht * wd, ' ') { }
18 char get() const // get the character at the cursor
19 { return contents[cursor]; } // implicitly inline
20 inline char get(pos ht, pos wd) const; // explicitly inline
21 Screen &clear(char = bkground);
22 private:
23 static const char bkground = ' ';
24 public:
25 Screen &move(pos r, pos c); // can be made inline later
26 Screen &set(char);
27 Screen &set(pos, pos, char);
28 // other members as before
29 // display overloaded on whether the object is const or not
30 Screen &display(std::ostream &os)
31 { do_display(os); return *this; }
32 const Screen &display(std::ostream &os) const
33 { do_display(os); return *this; }
34 private:
35 // function to do the work of displaying a Screen
36 void do_display(std::ostream &os) const {os << contents;}
37 // other members as before
38 private:
39 #ifdef IN_CLASS_INITS
40 pos cursor = 0;
41 pos height = 0, width = 0;
42 #else
43 pos cursor;
44 pos height, width;
45 #endif
46 std::string contents;
47 };
48
49 Screen &Screen::clear(char c)
50 {
51 contents = std::string(height*width, c);
52 return *this;
53 }
54
55 inline // we can specify inline on the definition
56 Screen &Screen::move(pos r, pos c)
57 {
58 pos row = r * width; // compute the row location
59 cursor = row + c; // move cursor to the column within that row
60 return *this; // return this object as an lvalue
61 }
62
63 char Screen::get(pos r, pos c) const // declared as inline in the class
64 {
65 pos row = r * width; // compute row location
66 return contents[row + c]; // return character at the given column
67 }
68
69 inline Screen &Screen::set(char c)
70 {
71 contents[cursor] = c; // set the new value at the current cursor location
72 return *this; // return this object as an lvalue
73 }
74 inline Screen &Screen::set(pos r, pos col, char ch)
75 {
76 contents[r*width + col] = ch; // set specified location to given value
77 return *this; // return this object as an lvalue
78 }

useScreen.cpp

 1 #include <iostream>
2 using std::cout; using std::endl;
3
4 #include <string>
5 using std::string;
6
7 #include "Screen.h"
8
9 int main()
10 {
11 Screen myScreen(5,3);
12 // move the cursor to a given position, and set that character
13 myScreen.move(4,0).set('#');
14
15 Screen nextScreen(5, 5, 'X');
16 nextScreen.move(4,0).set('#').display(cout);
17 cout << "\n";
18 nextScreen.display(cout);
19 cout << endl;
20
21 const Screen blank(5, 3);
22 myScreen.set('#').display(cout); // calls nonconst version
23 cout << endl;
24 blank.display(cout); // calls const version
25 cout << endl;
26
27 myScreen.clear('Z').display(cout); cout << endl;
28 myScreen.move(4,0);
29 myScreen.set('#');
30 myScreen.display(cout); cout << endl;
31 myScreen.clear('Z').display(cout); cout << endl;
32
33 // if move returns Screen not Screen&
34 Screen temp = myScreen.move(4,0); // the return value would be copied
35 temp.set('#'); // the contents inside myScreen would be unchanged
36 myScreen.display(cout);
37 cout << endl;
38 }

[笔记] 《c++ primer》显示器程序 Chapter7的更多相关文章

  1. Lua学习笔记4. coroutine协同程序和文件I/O、错误处理

    Lua学习笔记4. coroutine协同程序和文件I/O.错误处理 coroutine Lua 的协同程序coroutine和线程比较类似,有独立的堆栈.局部变量.独立的指针指令,同时又能共享全局变 ...

  2. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  3. Linux进程线程学习笔记:运行新程序

    Linux进程线程学习笔记:运行新程序                                         周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...

  4. 个人学习笔记:C语言程序结构

    个人笔记:C语言程序 函数 语句 输入输出对象 标识符 关键字 函数 一个C语言源程序,是由一个或多个函数定义顺序组成的,其中必须有一个函数名为main的主函数.C语言源程序中的函数是指完成特定数据处 ...

  5. [笔记] 《c++ primer》书店程序 Chapter7

    Sales_data.h 1 #ifndef SALES_DATA_H 2 #define SALES_DATA_H 3 4 #include "Version_test.h" 5 ...

  6. C++ Primer 学习笔记_95_用于大型程序的工具 --多重继承与虚继承

    用于大型程序的工具 --多重继承与虚继承 引言: 大多数应用程序使用单个基类的公用继承,可是,在某些情况下,单继承是不够用的,由于可能无法为问题域建模,或者会对模型带来不必要的复杂性. 在这些情况下, ...

  7. C++ Primer 学习笔记_88_用于大型程序的工具 --异常处理[续1]

    用于大型程序的工具 --异常处理[续1] 四.又一次抛出 有可能单个catch不能全然处理一个异常.在进行了一些校正行动之后,catch可能确定该异常必须由函数调用链中更上层的函数来处理,catch能 ...

  8. C++ Primer 学习笔记_87_用于大型程序的工具 --异常处理

    用于大型程序的工具 --异常处理 引言: C++语言包括的一些特征在问题比較复杂,非个人所能管理时最为实用.如:异常处理.命名空间和多重继承. 相对于小的程序猿团队所能开发的系统需求而言,大规模编程[ ...

  9. C++ Primer 学习笔记_91_用于大型程序的工具 --命名空间

    用于大型程序的工具 --命名空间 引言: 在一个给定作用域中定义的每一个名字在该作用域中必须是唯一的,对庞大.复杂的应用程序而言,这个要求可能难以满足.这样的应用程序的全局作用域中一般有很多名字定义. ...

随机推荐

  1. teprunner测试平台Django引入pytest完整源码

    本文开发内容 pytest登场!本文将在Django中引入pytest,原理是先执行tep startproject命令创建pytest项目文件,然后从数据库中拉取代码写入文件,最后调用pytest命 ...

  2. 前端vue性能优化

    一:代码层次优化 1.1.v-if 和 v-show 区分使用场景 v-if 是 真正 的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建:也是惰性的:如果在初始渲染时 ...

  3. Java单链表反转图文详解

    Java单链表反转图文详解 最近在回顾链表反转问题中,突然有一些新的发现和收获,特此整理一下,与大家分享 背景回顾 单链表的存储结构如图: 数据域存放数据元素,指针域存放后继结点地址 我们以一条 N1 ...

  4. TreeMap和HashMap的元素比较

    写在前面的话 2021.04,准备面试和CCF CSP认证的我准备做一套CCF模拟题,然后就有了此篇博客(x 题目:201912-2 回收站报数 题目截图: 第一个想法:读取每个垃圾的位置,存入Tre ...

  5. vs2019新建数据库后插入中文变问号

    在使用VS创建了数据库后如果直接给字符类型插入中文内容的话查询结果插入的中文会以"?"的格式展现. 原因是因为默认创建的数据库的排序类型为拉丁文不支持中文. 所以需要讲这个排序的字 ...

  6. kube-batch(一)安装

    安装 官方:https://github.com/kubernetes-sigs/kube-batch 下载镜像 安装 官方:https://github.com/kubernetes-sigs/ku ...

  7. 【C】EM卡韦根32/24格式卡号转换的实现

    写在前面 第八周实验报告的deadline马上就要到了,大家都在奋笔疾书.这次的实验报告中有一个十分秃然的任务,要求学生用C语言编写一段代码,来处理编码问题. 我的ddl是在第七周,所以较早地解决了这 ...

  8. 听说你买的基金又“绿了”,手把手教你用 Python选出好基金

    打工人打工魂打工都是人上人,红基金绿基金绿了又绿你基金.今天教大家一招不再被(基金)绿. 01 开发环境 Windows10 Python3 Pycharm 一些必要的库 02 步骤 1. 获取基金排 ...

  9. SpringIOC框架简单实现(注解实现)

    SpringIOC框架简单实现(注解实现) 前情回顾 SpringIOE简单介绍 运用注解的方式来实现IOC 首先,让我们来创建一个Dog类 @Component("dog")// ...

  10. Thinkphp5之laypage分页插件的实现

    //一下是laypage所用到的 js <script type="text/javascript" src="__STATIC__/lib/laypage/1.2 ...