注意:

inline 定义的函数必须放在 .h 文件中,否则编译器报错!
其次,注意写全称在 .h 里,如 std::

screen.h 头文件

#ifndef SCREEN_H
#define SCREEN_H
#include<string>
#include<iostream>class Screen
{public:typedef std::string::size_type index;            //定义序号别名Screen(index hgth, index wdth, const std::string &cntnts);  //声明构造函数char get() const { return contents[cursor];}    //定义成员函数 get() 返回位置处的字符char get(index ht, index wd) const;  //声明成员函数 get(a,b) get重载函数index get_cursor() const;      //声明成员函数 get_cursor() 返回indexScreen& move(index r, index c);        //声明成员函数 move(a,b) 返回screen类引用Screen& set(char);            //声明成员函数 set(a) 返回screen类引用Screen& display(std::ostream &os);   //声明成员函数 display(输出流) 返回screen类引用//----------------- 注意写 std:: ------------------------------------------------------
private:std::string contents;   //定义成员变量 内容字符串index cursor;     //定义成员变量 光标序号index height, width;   //定义成员变量 高,宽
};
#endif

screen.cpp 头文件具体实现文件

#include"screen.h"
#include<iostream>
#include<string>
using namespace std;Screen::Screen(index hgth, index wdth, const string &cntnts = " "):cursor(0), height(hgth),width(wdth)
{                           //定义构造函数 光标位置为0,屏幕尺寸初始化contents.assign(hgth*wdth, ' ');        //填充文本初始化为hgth*wdth个 空格if(!cntnts.empty())contents.replace(0,cntnts.size(),cntnts); //从第0位开始,用输入的字符串替换掉
}char Screen::get(index r, index c) const   //定义成员函数 get(a,b)
{if(!contents.empty() && r > 0 && c > 0 && r <= height && c <= width){return contents[(r-1) * width + c - 1];        //返回(r,c)行列处的字符}else{cout << "超出屏幕范围!!!" << endl;}return '!';
}Screen::index Screen::get_cursor() const   //定义成员函数get_cursor()
{return cursor;             //注意返回值类型前加类名!
}Screen& Screen::move(index r, index c)     //定义成员函数 move(),光标cursor移动到指定位置
{index row = r * width;cursor = row + c;return *this;
}Screen& Screen::set(char c)            //定义成员函数 set(a)
{contents[cursor] = c;         //光标处字符=creturn *this;
}Screen& Screen::display(ostream &os)       //定义成员函数 display()
{string::size_type index = 0;while(index != contents.size())          //把字符按每行宽度个输出{os << contents[index];if((index+1)%width == 0){os << '\n';}++index;}return *this;
}

main_screen.cpp 主函数

#include"screen.h"
#include<iostream>
using namespace std;
int main()
{Screen myscreen(5,6,"aaaaa\naaaaa\naaaaa\naaaaa\naaaaa\n");//定义Screen类对象myscreen,初始化为5行6列的字符myscreen.move(4,0).set('#').display(cout);//move使光标移动到指定的第5行,第1列,返回的是对象自己*this//set使光标处字符变成#//display用cout输出所有字符cout << "光标当前所在位置和字符为: " << myscreen.get_cursor() << " " << myscreen.get() << endl;string::size_type r=1, c=1;cout << "输入你要获取的位置行列数字(从1开始):" << endl;cin >> r >> c;cout << myscreen.get(r,c) << endl;return 0;
}

运行结果

屏幕Screen类文件编写相关推荐

  1. 账户Account类文件编写(static成员使用)

    static类成员是该类所有成员共享一份的数据,一处修改了,全部变更: static成员函数只能调用static成员数据: static const整形int,char,可以在类内声明和初始化,类外不 ...

  2. 文本查询TextQuery类文件编写

    读取用户指定的任意文本文件,然后允许用户从该文件中查找单词.查询的结果是该单词出现的次数,并列出每次出现所在的行.如果某单词在同一行中多次出现,程序将只显示该行一次.行号按升序显示,即第 7 行应该在 ...

  3. 应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上

    应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上. package p1;import java.io.*; public class FI ...

  4. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  5. 模板 (函数模板语法 ,类模板与函数模板的区别,:函数模板案例,普通函数与函数模板的区别,普通函数与函数模板调用规则,模板的局限性,类模板分文件编写.cpp,Person.hpp,类模板与友元)

    **01:函数模板语法: #include<iostream> using namespace std;//交换两个整型函数 void swapInt(int &a ,int &a ...

  6. java怎编写么解析一个类型_DAY3:你必须知道的java虚拟机之类篇——类文件的结构...

    马上过年啦,不知道大家今年有没有投资基金股票呢?是赚的盆满钵满还是拍断大腿,可以评论区一起交流交流,秀一秀哈哈,反正我是没来得及上车. 暴富西不可能暴富的啦,打工人嘛几能写写文章啦-记得点赞➕关注呀 ...

  7. Pdf File Writer 中文应用(PDF文件编写器C#类库)

    该文由小居工作室(QQ:2482052910)    翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/ ...

  8. Android进阶:十三、自定义类加载器加载加密类文件

    之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点.而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等. 其实笔者对类加 ...

  9. 文本类文件与VS关联-实践

    [问题描述] 为了方便办公,常把一类文本类文件使用vs工具打开,比如.sql后缀: 在办公电脑上,先后安装了Sqlserver.VS2003.VS2005.VS2008.由于开发工具直接从vs2003 ...

最新文章

  1. Java面试宝典之开源框架!
  2. 简单易学的深度学习算法:Wide Deep Learning
  3. 最全的Pycharm debug技巧
  4. Java基础学习总结(129)——Arrays.asList得到的List进行add和remove等操作出现异常解析
  5. Linux生成子进程函数fork()
  6. webstorm 自定义项目模板
  7. Android平台支持的多媒体格式
  8. python 删除特定列_pandas删除某一列的方法(drop函数)
  9. 极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)
  10. 【FreeRTOS】FreeRTOS学习笔记(3)— FreeRTOS任务与协程
  11. 五年级上册《桂花雨》教案
  12. 心脏线绘制python_心脏线怎么画?
  13. 一文带你了解,色环电阻失效相关知识
  14. 柚墨模板PPT干货分享:幻影动画,打造科幻大片前卫PPT
  15. 做过10亿次设计的人工智能「鹿班」,原来是他负责的!
  16. 什么是你的核心竞争力之六善用你的弱点
  17. java计算机毕业设计夕阳红养老院系统源码+lw文档+系统+数据库
  18. SQL注入与ASP木马上传
  19. java web中英翻译_中英文翻译简单web项目示例(3)
  20. 刘德华--9风雨人生路

热门文章

  1. MySQL源码编译与初始化
  2. SQL 查询--日期条件(今日、昨日、本周、本月。。。) (转)
  3. python 编程模型
  4. 树莓派安装MySQL数据库与卸载
  5. 软件架构阅读笔记(引)
  6. Android MVP模式简单易懂的介绍方式 (一)
  7. 手机号、姓名、邮箱等合法性验证方法
  8. 云计算之路-阿里云上:拔云见日的那一刻,热泪盈眶
  9. 嵌入式系统开发者需要掌握什么技术?
  10. 有意思,USB资料分享