049day(构造和析构函数的调用时机,递归例题(四则运算表达式求值)的学习)

本文探讨了构造函数与析构函数的调用时机,并通过具体代码示例进行说明。此外,还介绍了一个四则运算表达式求值的递归算法实现。

《2017年11月29日》【连续49天】

标题:构造和析构函数的调用时机,递归例题(四则运算表达式求值)的学习;

内容:A.今天尝试做了一道递归题,没做出来,头疼;

B.构造函数和析构函数调用时机:

class Demo{
int id;
public:
      Demo(int i){
      id=i;
      cout<<"id="<<id<<" constructed"<<endl;
      } 
      ~Demo(){
      cout<<"id="<<id<<" destructed"<<endl;
      }
}; 
Demo d1(1);   //第一行
void Func()
{
static Demo d2(2);
Demo d3(3);
cout<<"func"<<endl; 
}
int main(){
Demo d4(4);    //第二行
d4 =6;      //第三,四行 ,生产临时对象和临时对象消亡
cout<<"main"<<endl;
{Demo d5(5);   //第六行
}      //第七行,局部变量消亡
Func();  //函数中对象的生成和消亡
cout<<"main ends"<<endl;
return 0;
}    //结束,所有对象都消亡(先定义(的)后消亡),(除new出来的)

注意:有些编译器会在使用复制构造函数时进行优化,即减少调用复制构造函数;(devC++)

devC++在调用复制构造函数时,不会生成返回值临时对象;

C.四则运算表达式求值;

输入四则运算表达式,(整数,+,-,*,/组成)假设结果都是整数:

思路:表达式:  由 项 和'+','-'组成;

项:   由 因子 和 ‘*’ ,‘/’组成;

因子:(表达式) 或 整数;

进行递归处理:

int factor_value();
int term_value();
int expression_value();
int expression_value()   //求一个表达式的值; 
{
int result =term_value();
bool more =true;
while(more){
char op =cin.peek();   //看第一个字符,不取走;
if(op=='+'||op=='-'){
cin.get();  //是+或-就取走它 
int value =term_value();
if(op =='+')
result += value;
else result -=value;

else more=false;
} return result;

int term_value()
{
int result =factor_value();
while(true){
char op=cin.peek();
if(op =='*'||op=='/'){
cin.get();
int value=factor_value();
if(op=='*')
result *=value;
else result /= value;
}else break;
} return result;

int factor_value()
{
int result=0;
char c=cin.peek();
if(c=='('){
cin.get();
result=expression_value();
cin.get();
    }
    else {
    while(isdigit(c)){   //这是一个判断参数是否为十进制数字的函数
    result =10*result+c-'0';
    cin.get();
    c=cin.peek();
    }
    }return result;
}

int main()

注意:输入时是西文;

 

明日计划:复习;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值