屏幕Screen类文件编写
注意:
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类文件编写相关推荐
- 账户Account类文件编写(static成员使用)
static类成员是该类所有成员共享一份的数据,一处修改了,全部变更: static成员函数只能调用static成员数据: static const整形int,char,可以在类内声明和初始化,类外不 ...
- 文本查询TextQuery类文件编写
读取用户指定的任意文本文件,然后允许用户从该文件中查找单词.查询的结果是该单词出现的次数,并列出每次出现所在的行.如果某单词在同一行中多次出现,程序将只显示该行一次.行号按升序显示,即第 7 行应该在 ...
- 应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上
应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上. package p1;import java.io.*; public class FI ...
- C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)
C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...
- 模板 (函数模板语法 ,类模板与函数模板的区别,:函数模板案例,普通函数与函数模板的区别,普通函数与函数模板调用规则,模板的局限性,类模板分文件编写.cpp,Person.hpp,类模板与友元)
**01:函数模板语法: #include<iostream> using namespace std;//交换两个整型函数 void swapInt(int &a ,int &a ...
- java怎编写么解析一个类型_DAY3:你必须知道的java虚拟机之类篇——类文件的结构...
马上过年啦,不知道大家今年有没有投资基金股票呢?是赚的盆满钵满还是拍断大腿,可以评论区一起交流交流,秀一秀哈哈,反正我是没来得及上车. 暴富西不可能暴富的啦,打工人嘛几能写写文章啦-记得点赞➕关注呀 ...
- Pdf File Writer 中文应用(PDF文件编写器C#类库)
该文由小居工作室(QQ:2482052910) 翻译并提供解答支持,原文地址:Pdf File Writer 中文应用(PDF文件编写器C#类库):http://www.cnblogs.com/ ...
- Android进阶:十三、自定义类加载器加载加密类文件
之前面试的时候有许多面试官问类加载器相关的问题,所以这是一个很重要的知识点.而且对于高级Android研发来讲,懂得更多类加载相关的东西,对开发也会有很多的帮助,比如热更新,类加密等. 其实笔者对类加 ...
- 文本类文件与VS关联-实践
[问题描述] 为了方便办公,常把一类文本类文件使用vs工具打开,比如.sql后缀: 在办公电脑上,先后安装了Sqlserver.VS2003.VS2005.VS2008.由于开发工具直接从vs2003 ...
最新文章
- Java面试宝典之开源框架!
- 简单易学的深度学习算法:Wide Deep Learning
- 最全的Pycharm debug技巧
- Java基础学习总结(129)——Arrays.asList得到的List进行add和remove等操作出现异常解析
- Linux生成子进程函数fork()
- webstorm 自定义项目模板
- Android平台支持的多媒体格式
- python 删除特定列_pandas删除某一列的方法(drop函数)
- 极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)
- 【FreeRTOS】FreeRTOS学习笔记(3)— FreeRTOS任务与协程
- 五年级上册《桂花雨》教案
- 心脏线绘制python_心脏线怎么画?
- 一文带你了解,色环电阻失效相关知识
- 柚墨模板PPT干货分享:幻影动画,打造科幻大片前卫PPT
- 做过10亿次设计的人工智能「鹿班」,原来是他负责的!
- 什么是你的核心竞争力之六善用你的弱点
- java计算机毕业设计夕阳红养老院系统源码+lw文档+系统+数据库
- SQL注入与ASP木马上传
- java web中英翻译_中英文翻译简单web项目示例(3)
- 刘德华--9风雨人生路