- 浏览: 491425 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
hypercube:
markin'
配置D语言编程环境 -
qiezi:
qiezi 写道yangyang_08 写道1 ...
我的编程语言学习经历 -
qiezi:
yangyang_08 写道1、现在如果做并发服务器,楼主选用 ...
我的编程语言学习经历 -
yangyang_08:
1、现在如果做并发服务器,楼主选用什么样的语言架构?2、lua ...
我的编程语言学习经历 -
dearplain:
我也是语言爱好者,不过我一直坚持使用c。
我的编程语言学习经历
简单写了点代码,把那个方程组生成树结构:
输出结果如下:
不过最外层的几个对象都是临时的,所以必须要在它们析构以前把预处理的结果存入x和y中。
另外由于C++语言方面的原因,这里必须写成对象拷贝而不是引用或指针。
离最终结果还很遥远,一步步看吧。。。
#include <iostream> #include <string> using namespace std; enum Type{ TNumber, TVariable, TOperator }; enum Operator{ OAdd, OSub, OMul, ODiv, OAssign, ONone }; class Variable{ Type type_; const char* name_; Operator op_; double value_; Variable* var1_; Variable* var2_; public: template <class T> static Variable convertToVariable(T value){ return Variable(static_cast<double>(value)); } Variable(const char* name){ type_ = TVariable; name_ = name; op_ = ONone; var1_ = 0; var2_ = 0; } Variable(const Variable& var){ type_ = var.type_; name_ = var.name_; op_ = var.op_; value_ = var.value_; if (var.var1_) var1_ = new Variable(*var.var1_); else var1_ = 0; if (var.var2_) var2_ = new Variable(*var.var2_); else var2_ = 0; } Variable(double value){ type_ = TNumber; value_ = value; op_ = ONone; var1_ = 0; var2_ = 0; } Variable(Operator op, Variable var1, Variable var2){ type_ = TOperator; op_ = op; var1_ = new Variable(var1); var2_ = new Variable(var2); } ~Variable(){ if (type_ == TOperator){ delete var1_; delete var2_; } } template <class T> Variable operator + (T value){ return Variable(OAdd, *this, Variable::convertToVariable(value)); } template <class T> Variable operator - (T value){ return Variable(OSub, *this, Variable::convertToVariable(value)); } template <class T> Variable operator * (T value){ return Variable(OMul, *this, Variable::convertToVariable(value)); } template <class T> Variable operator / (T value){ return Variable(ODiv, *this, Variable::convertToVariable(value)); } template <class T> Variable operator = (T value){ return Variable(OAssign, *this, Variable::convertToVariable(value)); } Variable operator = (Variable value){ return Variable(OAssign, *this, value); } friend ostream& operator << (ostream& os, const Variable& var); }; template <> Variable Variable::convertToVariable<Variable>(Variable value){ return Variable(value); } template <class T> Variable operator + (T value, Variable var){ return Variable(OAdd, Variable::convertToVariable(value), var); } template <class T> Variable operator - (T value, Variable var){ return Variable(OSub, Variable::convertToVariable(value), var); } template <class T> Variable operator * (T value, Variable var){ return Variable(OMul, Variable::convertToVariable(value), var); } template <class T> Variable operator / (T value, Variable var){ return Variable(ODiv, Variable::convertToVariable(value), var); } int deep = 0; ostream& operator << (ostream& os, const Variable& var){ for (int i=0; i<deep; ++i) os << "\t"; os << "|"; switch(var.type_){ case TNumber: os << "Number: " << var.value_; break; case TOperator: os << "Operator: "; { switch(var.op_){ case ODiv: os << "/"; break; case OMul: os << "*"; break; case OAdd: os << "+"; break; case OSub: os << "-"; break; case OAssign: os << "="; break; } } break; case TVariable: os << "Variable: " << string(var.name_); break; } os << "|" << endl; deep ++; if (var.var1_) os << *var.var1_; if (var.var2_) os << *var.var2_; deep --; return os; } int main(){ Variable x("x"); Variable y("y"); // x = 10; y = 5; const Variable& v1 = (x + 5 = y * 3); const Variable& v2 = (x / y = 2); const Variable& v3 = ((x + y) * (x - y) / 5 = 15); cout << v1 << endl; cout << v2 << endl; cout << v3 << endl; }
输出结果如下:
|Operator: =| |Operator: +| |Variable: x| |Number: 5| |Operator: *| |Variable: y| |Number: 3| |Operator: =| |Operator: /| |Variable: x| |Variable: y| |Number: 2| |Operator: =| |Operator: /| |Operator: *| |Operator: +| |Variable: x| |Variable: y| |Operator: -| |Variable: x| |Variable: y| |Number: 5| |Number: 15|
不过最外层的几个对象都是临时的,所以必须要在它们析构以前把预处理的结果存入x和y中。
另外由于C++语言方面的原因,这里必须写成对象拷贝而不是引用或指针。
离最终结果还很遥远,一步步看吧。。。
发表评论
-
Cilk++,XL
2009-08-05 10:04 2707刚看到CSDN新闻:Intel获得Cilk++技术 多核处理器 ... -
关于内存管理的一点想法
2009-07-14 16:11 1776分布式轻量级线程框架(还没取名)最近几个修改: 1、消息对象采 ... -
增加了monitor_node功能
2009-07-13 14:57 1832给分布式框架增加了类似 erlang 的 monitor_no ... -
轻量级线程切换效率
2009-07-13 12:07 2470同事测试了libcoro,它的linux版本可以使用4种模式, ... -
Cache Pool 架构
2009-06-16 10:05 3265先比较一下Hadoop。 Hadoop 架构: Cach ... -
高可用性Cache池
2009-06-15 16:10 4366前段时间开发上线了一个Cache池,使用双层Cache池冗余, ... -
抛开析构函数
2007-08-15 22:19 3408内存管理通常指的是堆 ... -
C++程序设计
2007-03-25 13:37 104上周在修改扩充同事的代码,发现几个问题。 1、访问级别几乎全 ... -
为C++实现一个IDL (零)
2005-09-15 01:27 4699一、问题。这段时间考虑实现一个纯C++的分布式服务包装库 ... -
为C++实现一个IDL (一)
2005-09-17 19:40 3000前面简单写了点静态结构,这一次将主要关注动态模型以及调用 ... -
正式建立asgard项目 (因ancients已经被人使用了)
2005-09-20 10:30 1894“为C++实现一个IDL” ... -
为C++实现一个IDL (二)
2005-09-20 22:34 2421说明:要看懂后面那部分代码,即使用Typelist的部分 ... -
为C++实现一个IDL (三)
2005-09-21 20:34 2725一、修正错误。首先修正第二篇中的一些错误,错误的内容可见 ... -
为C++实现一个IDL (四)
2005-09-22 19:13 2047如《为C++实现一个IDL(三)》一文中所说,还剩最后一 ... -
asgard项目遗留问题 (2005-09-27更新)
2005-09-24 17:00 1810asgard项目已经准备了 ... -
C++实现简单的类型库
2005-09-26 17:31 3001很久以前看到有人问“如何在C++中实现动态加载类”时,简 ... -
为C++实现一个IDL (五)
2005-09-28 22:57 2068本篇没什么清晰的目的,只是解释一下前面的几个问题,并提出 ... -
自己写的一个max函数
2005-12-12 10:45 1927CSDN上看到有人问能否实现一个效率较高的max函数,效 ... -
C++之AOP
2005-12-15 15:43 5760AOP是近年炒得很热,但却用得很少的一门技术,不过这并不 ... -
[C++之AOP]实战Aspect C++之检查内存泄漏
2005-12-16 22:38 2737前面简单介绍了Aspect C++,相信没人看出它有什么 ...
相关推荐
突发奇想的好点子PPT模板.pptx,一个灯泡放在模板的中心,发散开来4各部分,用以表现一个突发奇想的好点的四方面。突发奇想的好点子PPT模板免费下载,提供.pptx格式下载。
售后客服的突发奇想.doc
#include"reg52.h" #define u8 unsigned char sbit power_GND=P1^1;// sbit power_VCC=P1^2;// sbit signal_PWM=P1^3;//信号引脚 u8 temp=0;//累加标志 u8 flage=0;//清零标志 //开启定时器配置 ... }
两天突发奇想,结果就做了一个jQ的tip插件,形状就像下面这样。会随title的多少改变大小的哟.
江苏省南通市小海中学高三语文学生作文突发奇想的力量素材
assistant-for-reciting-the-English-text 背书时的突发奇想 目前还不能批改,不过大概晚上就可以了
小学美术市级公开课《怪兽奇想》教案及教学反思.pdf
奇想达DM6446开发板资料,包括原理图和用户手册,有需要的人可以下载来看看
StereoVision-tensorflow 使用tensorflow实现双目视觉中的BM, SGBM算法
输出顺时针旋转的数字方阵
关于 Suddenly want to write a background management system template, irregularly scheduled update to GitHub 突然想写一个后台管理系统模板,不定期更新到GitHub 构建运行 # clone the project ...
给大家无聊的时候玩玩
今天突发奇想,跟ChatGPT进行了一场坦诚的对话。 第一从GPT-4的视角,看到它是如何看待:ChatGPT等AI工具的涌现,对我们工作、生活、赚钱机会带来的影响。 Q1:使用ChatGPT能获得巨大提升的10类人群 Q2:ChatGPT的...
突发奇想,好多小说软件上的听小说功能都是收费的,咱们写个小程序读一读,岂不是很哇塞! 看了一些资料,这里给大家分享出来,已经测试可以用。 C++代码和python代码实现对文本的朗读功能,代码比较简单,仅供参考...
前两天突发奇想,能不能让网页上的元素很容易的发光?结果正好发现flash里面有这样的滤镜。于是就硬着头皮写了个flash,实现了发光flash的动态生成。再结合javascript实现定位,把发光的flash放到真实的dom后面。...
云盘源码java后端服务器+前端electron前后端分离式自从学习了一点点electron基础命令(也就是几个标准单词),我就突发奇想,想写一款桌面基本的应用,但是也不知道该写什么demo,然后就这样子,想啊想…,直到发生了...
高中数学要学习,资料难下载?没关系,“网站图片下载器”帮您将人民...无奈工作几年学的都还给了老师,于是突发奇想做一个小程序把高中数学下载本地,再来好好复习。 本系统只供个人学习和交流用,请尊重原著版权。
最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程。 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList LinkedHashMap中的双向列表不再是回环的。 ...
这几天突发奇想,突然想自己写一个js跨域访问天气的接口然后实现天气预报功能的小例子 但是jquery跨域访问的时候出现了点问题 上csdn上晃悠了一大圈发现大多是答非所问 不少东西花积分下载之后 例子里面根本就只提供...