﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-xiajing0228</title><link>http://www.cppblog.com/xiajing0228/</link><description /><language>zh-cn</language><lastBuildDate>Mon, 06 Apr 2026 03:31:56 GMT</lastBuildDate><pubDate>Mon, 06 Apr 2026 03:31:56 GMT</pubDate><ttl>60</ttl><item><title>从窗口句柄得到窗口的对象指针</title><link>http://www.cppblog.com/xiajing0228/archive/2007/01/25/17979.html</link><dc:creator>疯蝶雨人</dc:creator><author>疯蝶雨人</author><pubDate>Thu, 25 Jan 2007 06:55:00 GMT</pubDate><guid>http://www.cppblog.com/xiajing0228/archive/2007/01/25/17979.html</guid><wfw:comment>http://www.cppblog.com/xiajing0228/comments/17979.html</wfw:comment><comments>http://www.cppblog.com/xiajing0228/archive/2007/01/25/17979.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/xiajing0228/comments/commentRss/17979.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiajing0228/services/trackbacks/17979.html</trackback:ping><description><![CDATA[今天无意中学到了一个小的知识点,故赶紧写下来以防遗忘.<br /> 在很多的对话框操作中,我们经常要用到在一个对话框中调用另一个对话框的函数或变量.可以用如下方法来解决.<br />    HWND hWnd=::FindWindow(NULL,_T("Sphere"));      //得到对话框的句柄<br />   C***Dialog* pWnd= (C***Dialog*)FromHandle(hWnd); //由句柄得到对话框的对象指针<br />   pWnd-&gt;xxx( );                                             //调用C***Dialog中的函数xxx();<br /><img src ="http://www.cppblog.com/xiajing0228/aggbug/17979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiajing0228/" target="_blank">疯蝶雨人</a> 2007-01-25 14:55 <a href="http://www.cppblog.com/xiajing0228/archive/2007/01/25/17979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对面向对象的认识</title><link>http://www.cppblog.com/xiajing0228/archive/2007/01/16/17663.html</link><dc:creator>疯蝶雨人</dc:creator><author>疯蝶雨人</author><pubDate>Tue, 16 Jan 2007 01:23:00 GMT</pubDate><guid>http://www.cppblog.com/xiajing0228/archive/2007/01/16/17663.html</guid><wfw:comment>http://www.cppblog.com/xiajing0228/comments/17663.html</wfw:comment><comments>http://www.cppblog.com/xiajing0228/archive/2007/01/16/17663.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiajing0228/comments/commentRss/17663.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiajing0228/services/trackbacks/17663.html</trackback:ping><description><![CDATA[面向对象,就是,思考问题的方法,以对象为主体,眼睛看什么都是对象<br />说[对象],其实还是不好懂,因为这个概念是直接从英文翻译过来的<br />对中国人也许说,面向东西,面向物体(抽象的物体),面向事物,之类的翻译或许更好理解<br />为什么说是面向对象呢,是为了和[面向过程]相对<br />以前[面向对象]的程序概念等还没有出来前<br />程序的设计都是在想怎样才能一步一步的解决问题,所以思维方式是过程,或是说步骤,早期的C语言呀BASIC呀的都是,汇编就更是了<br />而[面向对象]的基本是,如何设计一个个能动的物体(OBJECT对象)他们有不同的功能,之后的问题就是如何摆弄这些积木似的东西,相互组合调用各个对象的他们自己擅长的功能(术语叫METHOD,方法),最后完成一个大的目的(当然步骤,和过程,解决问题的先后顺序等,还是存在的)<br /><br />为什么要面向对象的思考方法和概念?<br />是为了提高开发效率<br />为什么能提高效率?因为面向对象的设计中,都是在设计一个个的物件(OBJECT),共同的地方,可以重复利用<br />C语言也有库什么的,为什么非要弄个新的,这么难懂的概念?<br />面向对象还有C语言等没有的很多新的概念,如继承,接口等,利用这些概念也可以提高开发的效率,减少重复开发<br />小的项目里也许体现不出来面向对象的优势<br />大的项目就很有用了(也许只能在实际开发中去体会了)<br /><br />面向过程的开发,人迎合机器的工作方式<br />面向对象,人更多的去集中抽象现实中的问题,以人的思维方式为本位,减少了对机器物理构造或工作方式的迎合,可以用更多的经历去考虑怎么解决问题,怎么实现某些功能<img src ="http://www.cppblog.com/xiajing0228/aggbug/17663.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiajing0228/" target="_blank">疯蝶雨人</a> 2007-01-16 09:23 <a href="http://www.cppblog.com/xiajing0228/archive/2007/01/16/17663.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何用栈来实现对数学表达式的求解</title><link>http://www.cppblog.com/xiajing0228/archive/2007/01/11/17512.html</link><dc:creator>疯蝶雨人</dc:creator><author>疯蝶雨人</author><pubDate>Thu, 11 Jan 2007 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/xiajing0228/archive/2007/01/11/17512.html</guid><wfw:comment>http://www.cppblog.com/xiajing0228/comments/17512.html</wfw:comment><comments>http://www.cppblog.com/xiajing0228/archive/2007/01/11/17512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiajing0228/comments/commentRss/17512.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiajing0228/services/trackbacks/17512.html</trackback:ping><description><![CDATA[
		<p>最近在网上看到一个求解数学表达式程序,感觉很不错,故拿出来修改之后供大家一起分享.<br />程序如下:<br />#include &lt;ctype.h&gt; //打开库文件<br />#include &lt;stdio.h&gt;<br />#include &lt;iostream.h&gt;<br />#include &lt;malloc.h&gt;<br />#include &lt;process.h&gt;<br />#include &lt;string.h&gt;</p>
		<p>#define error 0<br />#define ok 1<br />typedef struct{<br />  int *base;<br />  int *top;<br />  int stacksize;<br />}sqstack;</p>
		<p>class CExpression<br />{<br />public:<br /> CExpression();<br /> ~CExpression();<br />public:<br /> void initstack(sqstack &amp;s);<br /> int gettop(sqstack &amp;s);<br /> void push(sqstack &amp;s,int e);<br /> int pop(sqstack &amp;s,int &amp;e);<br /> int setfind(char a,char b[]); //查找a在b中的位置 <br /> char precede(char op1,char op2,int &amp;flag); //比较op1和op2的优先级<br />    int numlink(int opd,int ops,int &amp;flag); //数字与字符串的连接<br /> int operate(int n1,char o,int n2,int &amp;flag);//运算<br />            /*<br />            flag为一个标志变量, <br />            1为表达式有误！除数为0！<br />            2为表达式的值过大或过小<br />            3为未知类型的错误,可能没有这一点<br />            但为了容错,还是要加上这一点<br /> -*/<br />public:<br /> sqstack opnd;<br /> sqstack optr;<br />private:<br /> sqstack s;<br />};</p>
		<p>CExpression::CExpression()<br />{<br /> s.top=s.base;<br />}</p>
		<p>CExpression::~CExpression()<br />{<br />}</p>
		<p>void CExpression::initstack(sqstack &amp;s)<br />{<br /> s.base=(int *)malloc(10*sizeof(int));<br /> if(!s.base) exit(1);<br /> s.top=s.base;<br /> s.stacksize=100;<br />}</p>
		<p>int CExpression::gettop(sqstack &amp;s)<br />{<br /> int e;<br /> e=*(s.top-1);<br /> return e;<br />}</p>
		<p>void CExpression::push(sqstack &amp;s,int e)<br />{<br />    if(s.top-s.base&gt;=s.stacksize)<br /> {<br />  s.base=(int*)realloc(s.base,(s.stacksize+10*sizeof(int)));<br />  if(!s.base)<br />   exit(2);<br />  s.top=s.base+s.stacksize;<br />  s.stacksize+=10;<br /> }<br /> *s.top++=e;<br />}</p>
		<p>int CExpression::pop(sqstack &amp;s,int &amp;e)<br />{<br /> if(s.top==s.base)return error;<br /> e=*--s.top;<br /> return ok;<br />}</p>
		<p>int CExpression::setfind(char a,char b[])<br />{<br /> int i,j;<br /> i=-1,j=0;<br /> while(b[j]!='\0')<br />  if(a==b[j++]) {i=j-1;break;}<br />  return i;<br />}</p>
		<p>char CExpression::precede(char op1,char op2,int &amp;flag) //比较op1和op2的优先级<br />{<br /> int i,j;<br /> char st1[8]={"+-*/()#"}; //运算符初始化<br /> char st2[7][8]={"&gt;&gt;&lt;&lt;&lt;&gt;&gt;","&gt;&gt;&lt;&lt;&lt;&gt;&gt;","&gt;&gt;&gt;&gt;&lt;&gt;&gt;", //比较操作初始化<br />  "&gt;&gt;&gt;&gt;&lt;&gt;&gt;","&lt;&lt;&lt;&lt;&lt;= ","&gt;&gt;&gt;&gt; &gt;&gt;","&lt;&lt;&lt;&lt;&lt; ="};<br /> i=setfind(op1,st1);j=setfind(op2,st1);<br /> if (i&gt;-1 &amp;&amp; j&gt;-1) //如果你所输入的运算符不在+-*/（）#内，返回ERROR<br /> {return st2[i][j];flag=ok;}<br /> else flag=error;<br /> return error;<br />}</p>
		<p>int CExpression::numlink(int opd,int ops,int &amp;flag){ //数字与字符串的连接<br /> int aa=ops;<br /> ops=ops*10+opd-48;<br /> if (ops&lt;0 &amp;&amp; aa&gt;0 || aa&gt;214748364)<br />  flag=error; else flag=ok; //flag=0,说明ops已经过大，<br /> return ops;<br />}</p>
		<p>int CExpression::operate(int n1,char o,int n2,int &amp;flag){ //运算<br />            /*<br />            flag为一个标志变量, <br />            1为表达式有误！除数为0！<br />            2为表达式的值过大或过小<br />            3为未知类型的错误,可能没有这一点<br />            但为了容错,还是要加上这一点<br /> -*/<br /> <br /> int result=0;<br /> switch (o){<br /> case '+': //加法运算<br />  flag=0;result=n1+n2;<br />  if (n1&gt;=0 &amp;&amp; n2&gt;=0 &amp;&amp; result&lt;0 || n1&lt;=0 &amp;&amp; n2&lt;=0 &amp;&amp; result&gt;0)<br />   //两个大于0的数相加,和小于0,或两个小于0的数相加,和大于0,返回错误<br />  {flag=2;return error;}<br />  else<br />  {flag=0;return result;}<br />  break;<br /> case '-': //减法运算<br />  flag=0;result=n1-n2;<br />  if (n1&gt;=0 &amp;&amp; n2&lt;0 &amp;&amp; result&lt;0 || n1&lt;=0 &amp;&amp; n2&gt;0 &amp;&amp; result&gt;0)<br />   //一个大于0的数减一个小于0 的数,和小于0或一个小于0 的数减去一个大于0的数,返回错误<br />   <br />  {flag=2;return error;}<br />  else<br />  {flag=0;return result;} <br />  break; <br /> case '*': //乘法运算<br />  flag=0;result=n1*n2;<br />  if (n1&gt;=0 &amp;&amp; n2&gt;=0 &amp;&amp; result&lt;0 || n1&lt;=0 &amp;&amp; n2&lt;=0 &amp;&amp; result&gt;0)<br />   //两个大于0的数相乘,积小于0,或两个小于0的数相乘,积大于0,返回错误<br />  {flag=2;return error;}<br />  else<br />  {flag=0;return result;} <br />  break;<br /> case '/': //除法运算<br />  if(n2!=0) //如果被除数为0要返加ERROR<br />  {flag=0;return n1/n2;break;}<br />  else <br />   //除数为0,返回错误 <br />  {flag=1;return error;break;}<br /> }<br /> flag=3;return error;<br />}</p>
		<p>void main()<br />{<br /> CExpression expression;<br />// sqstack opnd; //用于存放运算数<br />// sqstack optr; //用于存放运算符<br /> int theta; //用于存放一个运算符<br /> int a,b; //用于存放用于操作的两个数<br /> int temp; //一个临时的变量<br /> int flag2=0; //一个标志变量，用于判断是否要连接数字<br /> int flag1; //一个标志变量，用于判断表达式是否是无效的<br /> int cn=0; //用于存放字符的位置<br /> int ops=0; //用于存放当前的操作数<br /> char st1[255]; //表达式中最多有255个字符<br /> char c; //用于表示当前的字符<br /> for (a=0;a&lt;255;a++) st1[a]='#'; //对数组初始化<br /> expression.initstack(expression.opnd); //对栈OPND初始化<br /> expression.initstack(expression.optr); //对栈OPTR初始化<br /> expression.push(expression.optr,'#');<br /> cin&gt;&gt;st1;<br /> temp=strlen(st1);<br /> if (st1[temp-1]!='#') st1[temp]='#'; //对表达式的结尾加入一个#<br /> <br /> c=st1[0];<br /> while(c!='#' || expression.gettop(expression.optr)!='#'){ //cout&lt;&lt;st1;<br />  <br />  c=st1[cn];<br />  if(isdigit(c)) {<br />   ops=expression.numlink(c,ops,temp);<br />   if (temp==ok)<br />   {<br />    if (flag2) expression.pop(expression.opnd,temp);<br />    flag2=1;<br />    expression.push(expression.opnd,ops);<br />    cn++;<br />    continue;<br />   }<br />   else<br />   {cout&lt;&lt;"表达式的值过大,无法计算!"&lt;&lt;endl;return;}<br />  }<br />  else{<br />   ops=0;<br />   flag2=0;<br />   temp=expression.precede(expression.gettop(expression.optr),c,temp); //temp为precede中的一个代号,为ok为正确的运算符比较,为error为错误的运算符比较 <br />   if (temp==error) {cout&lt;&lt;"表达式有误！无法求解！"&lt;&lt;endl;return;} //错误的运算符比较时,返回.<br />   switch (temp){<br />   case '&lt;':<br />    expression.push(expression.optr,c);cn++;break; //如果为&lt;,操作符入栈<br />   case '=':<br />    expression.pop(expression.optr,temp);cn++;break; //如果为=,操作符出栈<br />   case '&gt;': //如果为&gt;,执行运算操作<br />    expression.pop(expression.optr,theta);<br />    expression.pop(expression.opnd,b);<br />    expression.pop(expression.opnd,a);<br />    expression.operate(a,theta,b,flag1);<br />    if (flag1==1) {cout&lt;&lt;"表达式有误！除数不能为0！"&lt;&lt;endl;return;}<br />    else if(flag1==2) {cout&lt;&lt;"表达式的值过大或过小,无法计算!"&lt;&lt;endl;return;}<br />    else if(flag1==3) {cout&lt;&lt;"未知道类型的错误!"&lt;&lt;endl;return;}<br />    expression.push(expression.opnd,expression.operate(a,theta,b,flag1));<br />    break;<br />   case ' ':<br />    cout&lt;&lt;"表达式有误！无法求解！"&lt;&lt;endl;return;<br />   } //end switch<br />  } //end if<br /> } //end while<br /> a=expression.gettop(expression.opnd);<br /> cn=0;<br /> while(st1[cn]!='#') cout&lt;&lt;st1[cn++]; //输出你所输入字符串<br /> cout&lt;&lt;"=";<br /> cout&lt;&lt;a&lt;&lt;endl; //输出最终结果<br />}<br /><br />该程序的缺点是不能处理存在小数的表达式.</p>
<img src ="http://www.cppblog.com/xiajing0228/aggbug/17512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiajing0228/" target="_blank">疯蝶雨人</a> 2007-01-11 09:34 <a href="http://www.cppblog.com/xiajing0228/archive/2007/01/11/17512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>很高兴来到了这样的网站</title><link>http://www.cppblog.com/xiajing0228/archive/2007/01/10/17500.html</link><dc:creator>疯蝶雨人</dc:creator><author>疯蝶雨人</author><pubDate>Wed, 10 Jan 2007 07:15:00 GMT</pubDate><guid>http://www.cppblog.com/xiajing0228/archive/2007/01/10/17500.html</guid><wfw:comment>http://www.cppblog.com/xiajing0228/comments/17500.html</wfw:comment><comments>http://www.cppblog.com/xiajing0228/archive/2007/01/10/17500.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiajing0228/comments/commentRss/17500.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiajing0228/services/trackbacks/17500.html</trackback:ping><description><![CDATA[一直以来,都想找一些好的网站来学习,可一直没有如愿,今天终于找到这样的网站了.在这里要谢谢★Rosina★,是她介绍给我的.非常感谢!!!<img src ="http://www.cppblog.com/xiajing0228/aggbug/17500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiajing0228/" target="_blank">疯蝶雨人</a> 2007-01-10 15:15 <a href="http://www.cppblog.com/xiajing0228/archive/2007/01/10/17500.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>