一个简单封装用户命令的C++程序

原创 2007年09月23日 13:34:00
 

HTML Tags and JavaScript tutorial



一个简单封装用户命令的C++程序




在写测试程序的时候,重复编写重控制台读取命令的函数是令人乏味的,那么我们是否可以通过C++的封装性来完成一些简单的功能,以便日后的子类再次利用呢?这片文章就是在种需求的促使下,给出了一个简单的解决方案,希望网友对此有所启发

/**
 * @file Seminar1.cpp
 * @author Wang yanqing
 */
#include <iostream>
#include <memory>
using namespace std;
#define    SHOW_ME( name )                    cout << #name"'s size = " << sizeof( name ) << endl
#define SHOW_PROMPT()                    cout << "$ "
#define SHOW_INV_CMD( executor, cmd )    cout << #executor" Executor: " << char(cmd) << ": command not found" << endl
#define    HELP_ME( cmd, desc )            cout << #cmd"/t/t---/t"desc << endl
#define SHOW_OFFSET( type, member )        cout << #member"'s offset is " << /
        (unsigned long) (&((type *) 0)->member) << " in the struct "#type << endl
#define SHOW_LINE()                    do {/
        for ( int i = 0; i < 80; ++ i )    /
            cout << "-";                /
        cout << endl;                    /
    } while ( 0 )
#define SHOW_STRUCT( name )            do {/
        SHOW_LINE();                    /
        SHOW_OFFSET( name, c );            /
        SHOW_OFFSET( name, s );            /
        SHOW_OFFSET( name, i );            /
        SHOW_LINE();                    /
    } while ( 0 )
class Executor
{
    bool running;
protected:
    virtual bool OnCommand( int cmd )
    {
        bool consumed = true;
        switch ( cmd )
        {
        case 'q':
        case 'Q':
            running  = false;
            break;
        case 'h':
        case 'H':
            help();
            break;
        default:
            consumed = false;
            break;
        }
        return consumed;
    }
    virtual void DoRun() = 0;
    virtual void help() const
    {
        HELP_ME( q, "Quit" );
        HELP_ME( h, "Help" );
    }
public:
    Executor(): running( true )
    {
    }
    virtual ~Executor()
    {
    }
    void Run()
    {
        help();
        SHOW_PROMPT();
        while ( running )
        {
            DoRun();
        }
    }
};
class WYQ: public Executor
{
    struct WasteMemory
    {
        char  c;
        int   i;
        short s;
    };
    struct RationalMemory
    {
        char  c;
        short s;
        int   i;
    };
    struct CarfullMemory
    {
        char  c;
        char  unused;
        short s;
        int   i;
    };
    int GetCommand()
    {
        char cmd;
        for ( ; ; )
        {
            //cin >> cmd;
            cmd = getchar();
            if ( cmd != '/n' )
                break;
            SHOW_PROMPT();
        }
       
        return cmd;
    }
   
    void ShowSize( void )
    {
        SHOW_ME( WasteMemory );
        SHOW_ME( RationalMemory );
        SHOW_ME( CarfullMemory );
    }
    void ShowStruct( void )
    {
        SHOW_STRUCT( WasteMemory );
        SHOW_STRUCT( RationalMemory );
        SHOW_STRUCT( CarfullMemory );
    }
protected:
    virtual bool OnCommand( int cmd )
    {
        bool consumed = true;
       
        switch ( cmd )
        {
        case 'a':
        case 'A':
            ShowSize();
            break;
        case 'b':
        case 'B':
            ShowStruct();
            break;
       
        default:
            consumed = Executor::OnCommand( cmd );
            break;
        }
        return consumed;
    }
   
    virtual void DoRun()
    {
        int cmd = GetCommand();
        if ( !OnCommand( cmd ) )
        {
            SHOW_INV_CMD( WYQ, cmd );
            help();
        }
    }
    virtual void help() const
    {
        HELP_ME( a, "Show structures' size" );
        HELP_ME( b, "Show structures' distribution" );
        Executor::help();
    }
public:
    virtual ~WYQ()
    {
        cout << "WYQ: byebye!" << endl;
    }
};
int main( void )
{
    auto_ptr<Executor> wyq( new WYQ );
    wyq->Run();
    return 0;
}
 


编写一个简单的C++程序

编写一个简单的C++程序 每个C++程序都包含一个或多个函数(function),其中一个必须命名为main。操作系统通过调用main来运行C++程序。下面是一个非常简单的main函数,它什么也不干...
  • broadview2006
  • broadview2006
  • 2013年09月16日 15:00
  • 5554

第二章 从一个最简短的C++程序讲起

1 简单的屏幕输出小程序#include int main() { std::coutx; std::cout
  • yongchaocsdn
  • yongchaocsdn
  • 2017年02月25日 14:22
  • 3829

一个简单的c/c++程序

1. int main() { return 0; } 备注: (1)ANSI C/C++规定,main方法的返回值类型为int (2)return 0代表main成功执行,retur...
  • wangjianno2
  • wangjianno2
  • 2016年02月18日 00:17
  • 314

一个简单的c++加解密程序

第一步: 生成一个加密数组 其实就是一个打乱的ascii码表 unsigned char Encry[] = { 0x3e, 0x13, 0x25, 0x18, 0x6e, 0x15, 0x7b,...
  • zhanglidn013
  • zhanglidn013
  • 2015年07月06日 18:17
  • 907

C/C++拾遗(十九):MFC - 一个简单的窗口程序

在复习完C/C++的基础之后,今天开始学习MFC,自己使用的资料是孙鑫老师的《VC++深入精解》作为主要的学习脉络,而侯老师的《深入浅出MFC》则作为补充。今天是第一章基础,简要介绍windows编程...
  • a1232345
  • a1232345
  • 2015年07月13日 16:17
  • 2073

一个简单的C++程序(给17级新生的入门引导)

前段时间部门要求小源写一篇简单的入门引导来指引17级新生小白快速入门C++编程,小源写了下面这篇文章,经过学长更改一些小错误,算是可以发表出来了,这里也写出来给大家看,有不妥之处也请各位看官海涵。 ...
  • qq_38611556
  • qq_38611556
  • 2017年08月07日 17:54
  • 355

写一个简单的shell命令解释器

目前只可以实现一些基本的命令。
  • a1414345
  • a1414345
  • 2017年02月25日 14:11
  • 366

c++之封装——string类型的实现

以前在C语言中并没有string这个内置类型,但是到了c++里面就可以使用了,c++中可以定义string变量,对string类型的变量可以进行各种操作,包括相加、相减、赋值等等,就和int ,dou...
  • Korey_sparks
  • Korey_sparks
  • 2016年08月04日 01:00
  • 762

用C++函数封装Windows程序

对http://blog.csdn.net/sanqima/article/details/34436815
  • sanqima
  • sanqima
  • 2014年06月25日 15:52
  • 1116

一种基于简单递归思想的易操控xml解析封装(C++)

一种基于简单递归思想的易操控xml解析封装 C++
  • lonelyrains
  • lonelyrains
  • 2015年04月17日 10:34
  • 1230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个简单封装用户命令的C++程序
举报原因:
原因补充:

(最多只允许输入30个字)