| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3247 人关注过本帖, 1 人收藏
标题:[原创]一个支持四则运算的类
只看楼主 加入收藏
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
不,中学者我知道你的意思。你的意见是对的,直接扔int的确含义模糊。我正在改。我的想法是只是在类内部扔异常。这个异常的过程对使用者来说是透明的,他只需要cout<<CCalc("12+(12+4)");。至于是错误还是结果交给类来处理了……

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

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-09 17:26
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
抛异常会造成内存泄露的啊~~~

樱花大战,  有爱.
2008-05-09 17:30
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
中学为什么?会有内存泄露..如果说是因为用new 产生对象返回指针,没有释放好理解...如果不是动态创建怎么泄露呢?

学习需要安静。。海盗要重新来过。。
2008-05-09 17:39
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
是啊,不太明白,我已经没有改了,中学者先说说,估计会取消掉异常机制了……哎,那样的话接口机制也不能用了——因为要跨三层函数返回错误……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-09 17:43
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
异常的思路无非是下面:
一,设计异常类,把可能错误都包括在异常里面;excption ;
二,设计正常类,当发现数据违例的时候,用throw exception()(1);
三,在正常使用过程try{}catch( exception e){}(2);
1和2的关系是什么?是引用还是副本?传递机制是什么呢?知道的说下..呵呵

学习需要安静。。海盗要重新来过。。
2008-05-09 18:02
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
在函数内发生异常可以在两个地方处理,一个是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;
}

樱花大战,  有爱.
2008-05-09 18:07
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
今天刚好搞异常,sunkai兄的那个是副本....所以用异常我认为也有效率的考虑~

樱花大战,  有爱.
2008-05-09 18:10
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
晕..呵呵..忘记异常是强行打破正常执行顺序了...后面的执行过程都被异常屏蔽了..java用习惯了...没注意这个问题

学习需要安静。。海盗要重新来过。。
2008-05-09 18:14
中学者
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:20
帖 子:3554
专家分:80
注 册:2007-9-14
收藏
得分:0 
现在在开始写自己的DataStruction ,慢慢更新///呵呵

樱花大战,  有爱.
2008-05-09 18:16
c_acceleration
Rank: 1
等 级:新手上路
帖 子:101
专家分:0
注 册:2008-4-28
收藏
得分:0 
case 0:cout<<"被零除";break;  //这条语句一定可以捕捉么?

天道酬勤
2008-05-09 18:25
快速回复:[原创]一个支持四则运算的类
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039583 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved