- 浏览: 497177 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 2744刚看到CSDN新闻:Intel获得Cilk++技术 多核处理器 ... -
关于内存管理的一点想法
2009-07-14 16:11 1821分布式轻量级线程框架(还没取名)最近几个修改: 1、消息对象采 ... -
增加了monitor_node功能
2009-07-13 14:57 1865给分布式框架增加了类似 erlang 的 monitor_no ... -
轻量级线程切换效率
2009-07-13 12:07 2532同事测试了libcoro,它的linux版本可以使用4种模式, ... -
Cache Pool 架构
2009-06-16 10:05 3311先比较一下Hadoop。 Hadoop 架构: Cach ... -
高可用性Cache池
2009-06-15 16:10 4402前段时间开发上线了一个Cache池,使用双层Cache池冗余, ... -
抛开析构函数
2007-08-15 22:19 3444内存管理通常指的是堆 ... -
C++程序设计
2007-03-25 13:37 104上周在修改扩充同事的代码,发现几个问题。 1、访问级别几乎全 ... -
为C++实现一个IDL (零)
2005-09-15 01:27 4750一、问题。这段时间考虑实现一个纯C++的分布式服务包装库 ... -
为C++实现一个IDL (一)
2005-09-17 19:40 3032前面简单写了点静态结构,这一次将主要关注动态模型以及调用 ... -
正式建立asgard项目 (因ancients已经被人使用了)
2005-09-20 10:30 1936“为C++实现一个IDL” ... -
为C++实现一个IDL (二)
2005-09-20 22:34 2458说明:要看懂后面那部分代码,即使用Typelist的部分 ... -
为C++实现一个IDL (三)
2005-09-21 20:34 2759一、修正错误。首先修正第二篇中的一些错误,错误的内容可见 ... -
为C++实现一个IDL (四)
2005-09-22 19:13 2102如《为C++实现一个IDL(三)》一文中所说,还剩最后一 ... -
asgard项目遗留问题 (2005-09-27更新)
2005-09-24 17:00 1868asgard项目已经准备了 ... -
C++实现简单的类型库
2005-09-26 17:31 3038很久以前看到有人问“如何在C++中实现动态加载类”时,简 ... -
为C++实现一个IDL (五)
2005-09-28 22:57 2104本篇没什么清晰的目的,只是解释一下前面的几个问题,并提出 ... -
自己写的一个max函数
2005-12-12 10:45 1964CSDN上看到有人问能否实现一个效率较高的max函数,效 ... -
C++之AOP
2005-12-15 15:43 5797AOP是近年炒得很热,但却用得很少的一门技术,不过这并不 ... -
[C++之AOP]实战Aspect C++之检查内存泄漏
2005-12-16 22:38 2778前面简单介绍了Aspect C++,相信没人看出它有什么 ...
相关推荐
突发奇想的好点子PPT模板.pptx,一个灯泡放在模板的中心,发散开来4各部分,用以表现一个突发奇想的好点的四方面。突发奇想的好点子PPT模板免费下载,提供.pptx格式下载。
电商客服售后客服的突发奇想 售后客服的突发奇想是指在电商平台上,客户在收到商品后发现与订单不符,或者是卖家发错货的现象。这种情况下,客户会与客服团队进行沟通,以解决问题。这篇文章讨论了售后客服在处理...
1. jQuery插件开发基础:文档中提到的“突发奇想的一个jquery插件”,揭示了开发者在短时间内基于灵感创建了一个jQuery插件。这显示了jQuery插件开发的灵活性和易用性,即使是非正式的快速开发也能创造出实用的工具...
小明同学在使用电脑上网课的时候突然电脑黑屏出现故障,小明突发奇想,对于电脑故障类问题,是否能提前预知_memory_sample_failure_predict
#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;//清零标志 //开启定时器配置 ... }
标题中的“突发奇想的力量”是指在科技创新过程中,人们突然涌现的创新思维和想象力所带来的巨大影响。这种力量推动了人类社会的进步,使科技从看似遥不可及的概念变为日常生活中不可或缺的部分。描述中提到的江苏省...
"小学美术市级公开课《怪兽奇想》教案及教学反思" 本资源摘要信息中,我们可以总结出以下几个知识点: 1. 怪兽奇想教学目标:学生通过大胆想象,创作出奇特的怪兽形象,培养学生的想象力和设计意识。 这项教学...
assistant-for-reciting-the-English-text 背书时的突发奇想 目前还不能批改,不过大概晚上就可以了
奇想达DM6446开发板是一款基于TI(德州仪器)公司生产的DM6446数字媒体处理器的开发平台,常用于视频处理、高清显示以及其他多媒体应用的研发。这款开发板提供了丰富的接口和功能,方便工程师进行硬件设计与软件开发...
双目视觉(Stereo Vision)是一种通过两个相机模拟人类双眼观察场景,从而获取深度信息的技术。在计算机视觉领域,双目视觉广泛应用于自动驾驶、机器人导航、3D重建等多个领域。本项目“StereoVision-tensorflow”是...
关于 Suddenly want to write a background management system template, irregularly scheduled update to GitHub 突然想写一个后台管理系统模板,不定期更新到GitHub 构建运行 # clone the project ...
"米小国奇想世界"这套书显然是一套关于编程技术的读物,特别是强调了对Structs的理解和应用。虽然没有提供具体的标签,但从描述中我们可以推测这可能是一本介绍数据结构和算法的书籍,重点是Structs,可能是以一种...
给大家无聊的时候玩玩
在本实验中,任务是创建一个Java程序,用于输出顺时针旋转的数字方阵。这个方阵的特性是从中心开始,数字按照顺时针方向填充。给定的代码片段是用C++编写的,但我们可以将其转换为Java语言,并解释其工作原理。...
今天突发奇想,跟ChatGPT进行了一场坦诚的对话。 第一从GPT-4的视角,看到它是如何看待:ChatGPT等AI工具的涌现,对我们工作、生活、赚钱机会带来的影响。 Q1:使用ChatGPT能获得巨大提升的10类人群 Q2:ChatGPT的...
突发奇想,好多小说软件上的听小说功能都是收费的,咱们写个小程序读一读,岂不是很哇塞! 看了一些资料,这里给大家分享出来,已经测试可以用。 C++代码和python代码实现对文本的朗读功能,代码比较简单,仅供参考...
前两天突发奇想,能不能让网页上的元素很容易的发光?结果正好发现flash里面有这样的滤镜。于是就硬着头皮写了个flash,实现了发光flash的动态生成。再结合javascript实现定位,把发光的flash放到真实的dom后面。...
我便突发奇想,为像素小鸭“换衣服”。鼠标点击衣服,然后拖到鸭子身上。此后仍有作品或有趣游戏,请关注原作者,且点赞加收藏,记得推荐好友。下载即可游玩,快来下载吧!五星好评可以私信我,免费送资源!快来评论...
前两天突发奇想,能不能让网页上的元素很容易的发光?结果正好发现flash里面有这样的滤镜。于是就硬着头皮写了个flash,实现了发光flash的动态生成。再结合javascript实现定位,把发光的flash放到真实的dom后面。...