行为型模型 解释模型

行为型模型 解释模型

/**
 * 行为型模型 解释模型
 * 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
 *
 */

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>

class Context
{
public:
    Context(int num)
    {
        m_num = num;
    }
    void setNum(int num)
    {
        m_num = num;
    }
    int getNum()
    {
        return m_num;
    }
    void setRes(int res)
    {
        m_res = res;
    }
    int getRes()
    {
        return m_res;
    }

private:
    int m_num;
    int m_res;
};

class Expression
{
public:
    virtual void interpreter(Context * contex) = 0;
    virtual ~Expression() {}
};

class PlusExpression: public Expression
{
    virtual void interpreter(Context * contex) override
    {
        int num = contex->getNum();
        num++;
        contex->setNum(num);
        contex->setRes(num);
    }
};

class MinusExpression: public Expression
{
public:
    virtual void interpreter(Context * contex) override
    {
        int num = contex->getNum();
        num--;
        contex->setNum(num);
        contex->setRes(num);
    }
};

void mytest()
{
    Context *pcxt = new Context(10);
    Expression *e1 = new PlusExpression();
    e1->interpreter(pcxt);
    std::cout << "PlusExpression: " << pcxt->getRes() << std::endl;
    Expression *e2 = new MinusExpression();
    e2->interpreter(pcxt);
    std::cout << "MinusExpression: " << pcxt->getRes() << std::endl;

    delete e2;
    e2 = nullptr;
    delete e1;
    e1 = nullptr;
    delete pcxt;
    pcxt = nullptr;

    return;
}

int main()
{
    mytest();

    system("pause");
    return 0;
}
时间: 2024-07-30 17:54:24

行为型模型 解释模型的相关文章

多路复用I/O模型poll() 模型 代码实现

多路复用I/O模型poll() 模型 代码实现 poll()机制和select()机制是相似的,都是对多个描述符进行轮询的方式. 不同的是poll()没有描述符数目的限制. 是通过struct pollfd结构体,对每个描述符进行轮询的 struct pollfd fdarray { int fd;    /*文件描述符*/ short events; /*表示等待的事件*/ short revents;/*表示返回事件即实际发生的事件*/ }; data.h #ifndef DATA_H #d

编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的区别

一.编译型和解释型 我们先看看编译型,其实它和汇编语言是一样的:也是有一个负责翻译的程序来对我们的源代码进行转换,生成相对应的可执行代码.这个过程说得专业一点,就称为编译(Compile),而负责编译的程序自然就称为编译器(Compiler).如果我们写的程序代码都包含在一个源文件中,那么通常编译之后就会直接生成一个可执行文件,我们就可以直接运行了.但对于一个比较复杂的项目,为了方便管理,我们通常把代码分散在各个源文件中,作为不同的模块来组织.这时编译各个文件时就会生成目标文件(Object  

KVC简单介绍 -字典转模型,模型转字典

// 以下两个方法,都属于 KVC 的方法 // KVC 是 cocoa 的大招!间接给对象属性设置数值 // 程序执行过程中,动态给对象属性设置数值,不关心 .h 中是如何定义的 //      只要对象有属性(无论是在.h中还是在.m中定义的属性),就能够读取/设置! //      这种方式,有点违背程序的开发原则! // 字典转模型 setValuesForKeysWithDictionary // 模型转字典 dictionaryWithValuesForKeys //假设self.p

iOS 自定义对象及子类及模型套模型的拷贝、归档存储的通用代码

一.runtime实现通用copy 如果自定义类的子类,模型套模型你真的会copy吗,小心有坑. copy需要自定义类继承NSCopying协议 #import <objc/runtime.h> - (id)copyWithZone:(NSZone *)zone { id obj = [[[self class] allocWithZone:zone] init]; Class class = [self class]; while (class != [NSObject class]) {

概念辨析-生成模型/产生模型

机器学习的任务是从属性X预测标记Y,即求概率P(Y|X): 有监督学习 training data给了正确的答案即label,任务就是建立相应的模型,训练样本集外的数据进行分类预测. 生成式模型 生成模型学习一个联合概率分布P(x,y) 常见的判别方法有 k近邻法.感知机.决策树.逻辑回归.线性回归.最大熵模型.支持向量机(SVM).提升方法.条件随机场(CRF) 判别式模型 判别模型学习一个条件概率分布P(y|x) 常见的生成方法有混合高斯模型.朴素贝叶斯法和隐形马尔科夫模型 判别式模型举例:

django 模型-----定义模型

定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后,则django不会再生成默认的主键列 属性命名限制 不能是python的保留关键字 由于django的查询方式,不允许使用连续的下划线 定义属性 定义属性时,需要字段类型 字段类型被定义在django.db.mode

[模型优化]模型欠拟合及过拟合判断、优化方法

[模型优化]模型欠拟合及过拟合判断.优化方法 一.模型欠拟合及过拟合简介 模型应用时发现效果不理想,有多种优化方法,包含: 添加新特征 增加模型复杂度 减小正则项权重 获取更多训练样本 减少特征数目 增加正则项权重 具体采用哪种方法,才能够有效地提高模型精度,我们需要先判断模型是欠拟合,还是过拟合,才能确定下一步优化方向. 图1 模型欠拟合,即高偏差(high bias),是指模型未训练出数据集的特征,导致模型在训练集.测试集上的精度都很低.如图1左图所示. 模型过拟合,即高方差(high va

osg fbx模型删除模型中的某几个节点,实现编辑模型的功能

fbx model element count:80 三维视图: {三维} 4294967295 osg::MatrixTransform1 基本墙 wall_240 [361750] 4294967295 osg::MatrixTransform2 基本墙 wall_240 [361813] 4294967295 osg::MatrixTransform3 基本墙 wall_240 [361889] 4294967295 osg::MatrixTransform4 基本墙 wall_240 [

网络编程之IO模型——IO模型比较分析

网络编程之IO模型--IO模型比较分析 IO模型比较分析 到目前为止,已经将四个IO Model都介绍完了.现在回过头来回答最初的那几个问题:blocking和non-blocking的区别在哪,synchronous IO和asynchronous IO的区别在哪. 先回答最简单的这个:blocking vs non-blocking.前面的介绍中其实已经很明确的说明了这两者的区别.调用blocking IO会一直block住对应的进程直到操作完成,而non-blocking IO在kerne