自娱自乐:

大概是一直在说的代码规范,大概是玩一玩,以上。

代码规范:

  • 参考原文:链接

  • 相关节选:

    • 4 程序的版式

      • 4.4规则:较长的语句(>80字符)要分成多行书写。

      • 4.5规则:不允许把多个短语句写在一行中,即一行只写一条语句。

      • 4.6 规则:if、for、do、while、case、switch、default等语句自占一行,

        且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。

      • 4.7规则:代码行之内应该留有适当的空格

        象if、for、while 等关键字之后应留一个空格再跟左括号‘( ’, 以突出关键字。

        2)函数名之后不要留空格, 紧跟左括号’(’ , 以与关键字区别。

        4)‘ ,’ 之后要留空格, 如Function(x, y, z)。如果‘ ;’ 不是一行的结束符号, 其后也要留空格

        二元操作符的前后应当加空格。

    • 5 注释

      • 5.1规则:源文件头部应进行注释,列出:生成日期、作者、模块目的/功能等。

        /************************************************************

        FileName: test.cpp

        Author: Version : Date:

        Description: // 模块描述

        Version: // 版本信息

        Function List: // 主要函数及其功能

        1. -------

        History: // 历史修改记录



        David 96/10/12 1.0 build this moudle

        ***********************************************************/

      • 5.2规则:函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值等。

        /*************************************************

        Description: // 函数功能、性能等的描述

        Input: // 输入参数说明,包括每个参数的作

        // 用、取值说明及参数间关系。

        Output: // 对输出参数的说明。

        Return: // 函数返回值的说明

        Others: // 其它说明

        *************************************************/

      • 5.6建议:注释的主要目的应该是解释为什么这么做,而不是正在做什么。

        如果从上下文不容易看出作者的目的,说明程序的可读性本身存在比较大的问题,应考虑对其重构。

      • 5.7建议:避免非必要的注释。

    • 6 标识符命名

      • 6.1规则:命名尽量使用英文单词,力求简单清楚,避免使用引起误解的词汇和模糊的缩写,使人产生误解。

        说明:

        较短的单词可通过去掉“元音”形成缩写;

        较长的单词可取单词的头几个字母形成缩写;

        一些单词有大家公认的缩写。

        示例:如下单词的缩写能够被大家基本认可。

        temp 可缩写为 tmp

        flag 可缩写为 flg

        statistic 可缩写为 stat

        increment 可缩写为 inc

        message 可缩写为 msg

      • 6.4规则:常量、宏和模板名采用全大写的方式, 每个单词间用下划线分隔。

      • 6.9建议:函数名以大写字母开头,采用谓-宾结构(动-名),且应反映函数执行什么操作以及返回什么内容。

      • 6.10建议:类、结构、联合、枚举的命名须分别以C、S、U、E开头,其他部分遵从一般变量命名规范。

    • 7 可读性

      • 7.3规则:涉及物理状态或者含有物理意义的常量,避免直接使用数字,必须用有意义的枚举或常量来代替。
    • 8 变量、结构

      • 8.2规则:变量,特别是指针变量,被创建之后应当及时把它们初始化,以防止把未被初始化的变量当成右值使用。
    • 9 函数、过程

      • 9.7尽量写类的构造、拷贝构造、析构和赋值函数 ,而不使用系统缺省的。

      • 9.8建议:对于不需要拷贝构造函数时,应显式地禁止它,避免编译器生成默认的拷贝构造函数。

      • 9.10建议:禁止编写依赖于其他函数内部实现的函数。

      • 9.12建议:函数实现中不改变内容的参数要定义成const。

    • 10 c++专用规范

      • 10.3规则:主动使用const,避免使用宏。

      • 10.5规则:尽可能局部地声明变量。

具体代码:

  • Main.cpp

      /***************************************************************
    FileName: Main.cpp Author:newmoon
    Version :2.0
    Date:16/07/25 Description:
    输入一个字符串算式,拆分数字和运算符并输出 Function List:
    int main() 输入一个字符串算式,拆分数字和运算符并输出 History:
    <author> <time> <version > <desc>
    newmoon 16/07/25 2.0 代码规范相关
    **************************************************************/ #include"Scan.h"
    #include"Print.h"
    #include<iostream>
    #include<queue>
    using namespace std; int main()
    {
    Scan getStr;
    Print printQue; string s_input; //输入的字符串
    queue<string> qs_output; //输出的队列 cin >> s_input;
    //调用Scan类的对象中的相应函数
    //以获取拆分好的队列
    qs_output = getStr.ToStringQueue(s_input);
    //调用Print类的对象中的相应函数
    //以输出拆分好的队列
    printQue.PrintStringQueue(qs_output); return 0;
    }
  • Scan.h

      #ifndef SCAN_H
    #define SCAN_H #include<iostream>
    #include<queue>
    using namespace std; class Scan
    {
    public:
    //接收一个字符串算式,
    //将算式中的数字和运算符拆分并存入一个队列,
    //最后返回这个队列。
    queue<string> ToStringQueue(string s_input);
    }; #endif
  • Scan.cpp

      /**************************************************************************
    FileName: Scan.cpp Author:newmoon
    Version :2.0
    Date:16/07/25 Description:
    定义实现Scan类中的相关方法 Function List:
    queue<string> ToStringQueue(string s_input) 拆分算式中数字和运算符 History:
    <author> <time> <version > <desc>
    newmoon 16/07/25 2.0 代码规范相关
    **************************************************************************/ #include"Scan.h"
    #include<iostream>
    #include<queue>
    using namespace std; /********************************************************
    Description:接收一个字符串算式,
    将算式中的数字和运算符拆分并存入一个队列,
    最后返回这个队列。
    Input:一个字符串类型的算式
    Output:无
    Return:一个元素为string对象的队列
    Others:算式中的数字位数(包括小数位)超过十位则报错
    ********************************************************/ queue<string> Scan::ToStringQueue(string s_input)
    {
    queue<string> qs_output; //返回的队列
    string t_str; //暂存连接起来的数字的中间变量
    int cnt = 0; //统计数字位数的变量 //遍历整个算式字符串以拆分数字和运算符
    //碰到数字先接到中间变量上
    //碰到运算符则先前的数字入队
    for (int i = 0; i<s_input.size(); i++)
    {
    //遍历到运算符
    if (s_input[i] == '+' || s_input[i] == '-'
    || s_input[i] == '*' || s_input[i] == '/'
    || s_input[i] == '(' || s_input[i] == ')')
    {
    //中间变量若不为空(如以"-"开头)
    //中间变量里接起来的数字入队
    if (!t_str.empty())
    {
    qs_output.push(t_str);
    //清空中间变量以便下次连接
    t_str.clear();
    //重置位数统计以便下次统计
    cnt = 0;
    } //遍历到的运算符入队
    switch (s_input[i])
    {
    case'+':
    qs_output.push("+");
    break;
    case'-':
    qs_output.push("-");
    break;
    case'*':
    qs_output.push("*");
    break;
    case'/':
    qs_output.push("/");
    break;
    case'(':
    qs_output.push("(");
    break;
    case')':
    qs_output.push(")");
    break;
    }
    } //遍历到数字
    else
    {
    //接到中间变量上以组成数字
    t_str = t_str + s_input[i]; //统计数字位数
    if (s_input[i] != '.')
    {
    cnt++;
    } if (cnt > 10)
    {
    cout << "数字位数超过十位" << endl;
    exit(1);
    } //以数字结尾的算式需要特判
    //避免漏掉最后一个数字
    if (i == s_input.size()-1)
    {
    qs_output.push(t_str);
    }
    }
    } return qs_output;
    }
  • Print.h

      #ifndef PRINT_H
    #define PRINT_H #include<iostream>
    #include<queue>
    using namespace std; class Print
    {
    public:
    //输出接收的队列
    void PrintStringQueue(queue<string> qs_output);
    }; #endif
  • Print.cpp

    (明明是一样的星号。。。)

      /*************************************************************************
    FileName: Print.cpp Author:newmoon
    Version :2.0
    Date:16/07/25 Description:
    定义实现Print类中的相关方法 Function List:
    void PrintStringQueue(queue<string> qs_output) 输出一个接收的队列 History:
    <author> <time> <version > <desc>
    newmoon 16/07/25 2.0 代码规范相关
    **************************************************************************/ #include"Print.h"
    #include<iostream>
    #include<queue>
    using namespace std; /************************************
    Description:输出一个接收的队列
    Input:元素类型为string对象的队列
    Output:队列中的元素,即string对象
    Return:无
    Others:无
    *************************************/ void Print::PrintStringQueue(queue<string> qs_output)
    {
    //循环输出直到队列为空
    //以此来输出整个队列
    while(!qs_output.empty())
    {
    cout << qs_output.front() << endl;
    //弹出已输出的队首元素以准备下一次输出
    qs_output.pop();
    }
    }

顺便附带:

大概是又去看了看git相关的东西,原来只是为了完成上传代码的任务,不知道是什么东西,反正就照着教程一步一步做就是了,现在再回过头去看,感觉比一脸懵逼好点。下面只是一些自己的理解,助教学长后来倒是给了一些很不错的教程,适合小白,还有学长自己写的,链接如下:学长廖雪峰其他一其他二其他三(没必要全看,只是有些有时莫名不能访问,所以多列几个)

git大概是个分布式的版本控制系统,感觉写论文或代码的话可能会用到。所谓版本控制,就是一个东西改来改去有很多个版本,然后它会帮你记录各个版本,可以看版本间的不同,还可以回退到各个版本。分布式大概是这些版本就存在自己的电脑上,而不是存在一个中心服务器,当然也可以上传到远程的仓库,比如传到github上(免费的,还开源 ,感觉很厉害)。

使用的话,目前只用到了一些命令(也是命令行吧,长得和cmd挺像),现在是大概知道这些命令到底做了什么。git init 会在当前的目录下初始化一个仓库,大概就是用来存各个版本的地方,是会被隐藏起来的.git文件。git add 会把文件添加到仓库的缓存区,文件也会被追踪起来(不是很懂)。git commit 会把仓库缓存区的文件正式变成仓库里的一个版本,还要跟上版本信息。git push 就是把文件传到远程的仓库上,当然你要先添加一个远程的仓库。还有git status 可以看当前目录下状态,有哪些文件没被追踪,有哪些文件追踪还没存到仓库里,全部存到仓库里的话那工作目录就是干净的(clear)。目前基本这几个就够用了。

最新文章

  1. MVC+EF6+Oracle,提示ORA-01918: user &#39;***&#39; does not exist
  2. 交叉编译中的build、host和target
  3. Java 线程异常处理器
  4. ORACLE 查看RMAN的备份信息总结
  5. 最近一直在搞CAE,发现Eplan p8真的好强大。
  6. JVM内幕:Java虚拟机详解
  7. Qt-获取网络接口信息的综合示例
  8. iOS开发工程师笔试题
  9. Configure swagger with spring boot
  10. centos 安装apache activemq
  11. C++实现中缀表达式转前、后缀
  12. HUST 1602 Substring
  13. Yii实现Password Repeat Validate Rule
  14. Linq用法笔记
  15. c++ 回调函数封装
  16. 架构学习之高性能NoSQL
  17. 【2019年04月22日】A股最便宜的股票
  18. poj3087 Shuffle&#39;m Up(模拟)
  19. C++中如何对输出几位小数进行控制(setprecision)
  20. bzoj1572

热门文章

  1. tar.gz和bin,以及rpm,deb等linux后缀的文件的区别
  2. 深入js之基本语法
  3. ES6常用七大特性
  4. [转]a-mongodb-tutorial-using-c-and-asp-net-mvc
  5. SQL SERVER2014的安装
  6. git常用小操作。-- 自用
  7. nodejs记录2——一行代码实现文件下载
  8. 7、包装类、System、Math、Arrays、大数据运算
  9. 【SSH网上商城项目实战26】完成订单支付后的短信发送功能
  10. [LeetCode] Remove Element题解