目录
一、回顾
上回,我们确定了语言的名字、类型和语法。从今天开始,我们就要开始写代码了。
我们的语言首先要有变量,可能到最后语言做不好,但我们还有变量类。
二、使用的库
#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;
enum Type{
I=0,C,F,
};
对了,这里还定义了一个enum,表示变量的类型。
三、编写类
union Val{//变量值
int i;float f;char c;
};
class var{//变量类
public:
Type type;//类型
Val val;
var(){}//初始化
var(int x){val.i=x;type=I;}
var(float x){val.f=x;type=F;}
var(char x){val.c=x;type=C;}
};
i是int类型,c是字符型,f是浮点型(目前还不支持字符串)
顺便说一下Val 的作用,就是动态类型。再给大家贴出isch()的代码:
四、编写运算符重载
这里我们为了后续写代码方便,写几个运算符重载:
var operator +(var a,var b){//加法
if(a.type==I)return a.val.i+b.val.i;
if(a.type==F)return a.val.f+b.val.f;
}
var operator -(var a,var b){//减法
if(a.type==I)return a.val.i-b.val.i;
if(a.type==F)return a.val.f-b.val.f;
}
var operator *(var a,var b){//乘法
if(a.type==I)return a.val.i*b.val.i;
if(a.type==F)return a.val.f*b.val.f;
}
var operator /(var a,var b){//除法
if(a.type==I)return a.val.i/b.val.i;
if(a.type==F)return a.val.f*b.val.f;
}
ostream& operator <<(ostream &out,var va){//输出重载
if(va.type==I)out<<va.val.i;
if(va.type==C)out<<va.val.c;
if(va.type==F)out<<va.val.f;
return out;
}
最后测试一下:
var a,b;
a=13,b=7;
cout<<a-b;
运行成功。