学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
发新话题
打印

[原创]一个支持四则运算的类

不,中学者我知道你的意思。你的意见是对的,直接扔int的确含义模糊。我正在改。我的想法是只是在类内部扔异常。这个异常的过程对使用者来说是透明的,他只需要cout<<CCalc("12+(12+4)");。至于是错误还是结果交给类来处理了……

飞燕是什么意思呢?不是很明白……扔异常本身会造成内存泄露吗?如果是的话我就改成返回值好了……因为设计了接口,如果要返回值的话会很麻烦……
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

抛异常会造成内存泄露的啊~~~
汇编.....

TOP

中学为什么?会有内存泄露..如果说是因为用new 产生对象返回指针,没有释放好理解...如果不是动态创建怎么泄露呢?
学习需要安静。。海盗要重新来过。。

TOP

是啊,不太明白,我已经没有改了,中学者先说说,估计会取消掉异常机制了……哎,那样的话接口机制也不能用了——因为要跨三层函数返回错误……
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

异常的思路无非是下面:
一,设计异常类,把可能错误都包括在异常里面;excption ;
二,设计正常类,当发现数据违例的时候,用throw exception()(1);
三,在正常使用过程try{}catch( exception e){}(2);
1和2的关系是什么?是引用还是副本?传递机制是什么呢?知道的说下..呵呵
学习需要安静。。海盗要重新来过。。

TOP

在函数内发生异常可以在两个地方处理,一个是throw然后在函数外的try块catch捕获;另一种直接在函数体内设置try块catch捕获.....往往可能出现内存泄露的就是第一种---通过throw的方式..
  一旦throw,则直接跳出函数体,这个时候会释放函数体内的对象(如果对象尚未构建完成则不会析构释放,这种往往是自己重写new的时候会发生).
下面来段小代码可以看出内存泄露了(实际编程肯定不会这样写):
复制内容到剪贴板
代码:
class cat{
public:
cat(){ cout<<"creat cat"<<endl;}
~cat(){cout<<"destroy cat"<<endl;}
};
class fate
{
   cat* p;
public:
   fate():p(0){ p=new cat[5]; throw 2; }
   ~fate() { delete [] p; }
};
int main(void)
{
  try{
    fate f;
     }
    catch(int){
      cout<<"oh my god!"<<endl;
     }
   return 0;
}
汇编.....

TOP

今天刚好搞异常,sunkai兄的那个是副本....所以用异常我认为也有效率的考虑~
汇编.....

TOP

晕..呵呵..忘记异常是强行打破正常执行顺序了...后面的执行过程都被异常屏蔽了..java用习惯了...没注意这个问题
学习需要安静。。海盗要重新来过。。

TOP

现在在开始写自己的DataStruction ,慢慢更新///呵呵
汇编.....

TOP

case 0:cout<<"被零除";break;  //这条语句一定可以捕捉么?

TOP

发新话题