《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()

注意:输入时是西文;
明日计划:复习;
本文探讨了构造函数与析构函数的调用时机,并通过具体代码示例进行说明。此外,还介绍了一个四则运算表达式求值的递归算法实现。
的学习)&spm=1001.2101.3001.5002&articleId=78660763&d=1&t=3&u=7fe09a384dbd41219c6f92a39bd55e2b)

被折叠的 条评论
为什么被折叠?



