047day(复制构造函数和递归例题(波兰表达式)的学习)
2017-11-27 00:25
302 查看
172210704111-陈国佳总结《2017年11月26日》【连续047天】
标题:复制构造函数和递归例题(波兰表达式)的学习;
内容:A.那道拨钟问题还是没什么思路;
B.复制构造函数:
X::X(X&)或X::X(const X&),
如果没有定义复制构造函数,编译器自动生成默认复制构造函数,它会完成复制功能;
如果自己定义复制构造函数,则默认的不会存在;
不允许形如X::X(X)的构造函数;
1)当用一个对象去初始化同类的另一个对象;
Complex c2(c1);
2)如果某函数有一个参数是类A的对象,那么调用该函数时,类A的复制构造函数将被调用。
class A
{
public:
A(){ };
A(A&a){
cout<<"COPY constructor called"<<endl;
}
};
void Func(A a1){ }
int main()
{
A a2;
Func(a2);
return 0;
}
程序输出:COPY constructor called ;
3)如果函数的返回值是类A的对象时,则函数返回时,
A的复制构造函数被调用;(这里有点问题)//已解决,是因为devC++对复制构造函数的优化;
但对象间赋值并不导致复制构造函数被调用;
当我们使用常量引用参数时,void fun(CMclass obj_){ cout<< "fun" <<endl;}
可以使用 CM有class&作为参数,来防止调用复制构造函数,来减少开销;
要确保实参的值在函数中不被改变,可加const;
C.波兰(前置)表达式:
2+3 -> + 2 3;(2+3)*4 -> * + 2 3 4;
输入:输入一行,运算符和运算数之间都用空格分隔,运算数是浮点数;
输出:
表达式的值;
波兰表达式定义:
1)一个数是一个波兰表达式,值为该数;
2)”运算符 波兰表达式 波兰表达式“是波兰表达式,值为两个波兰表达式的值运算的结果;
例:
#include<cstdlib>
using namespace std;
double exp(){
char s[20]; // 假设读入的全部小于20;
cin>>s;
switch(s[0]){
case '*': return exp()*exp();
case '/': return exp()/exp();
case '+': return exp()+exp();
case '-': return exp()-exp();
default: return atof(s);
break;
}
}
int main()
{
cout<<exp()<<endl;
return 0;
}
明日计划:析构函数;
标题:复制构造函数和递归例题(波兰表达式)的学习;
内容:A.那道拨钟问题还是没什么思路;
B.复制构造函数:
X::X(X&)或X::X(const X&),
如果没有定义复制构造函数,编译器自动生成默认复制构造函数,它会完成复制功能;
如果自己定义复制构造函数,则默认的不会存在;
不允许形如X::X(X)的构造函数;
1)当用一个对象去初始化同类的另一个对象;
Complex c2(c1);
2)如果某函数有一个参数是类A的对象,那么调用该函数时,类A的复制构造函数将被调用。
class A
{
public:
A(){ };
A(A&a){
cout<<"COPY constructor called"<<endl;
}
};
void Func(A a1){ }
int main()
{
A a2;
Func(a2);
return 0;
}
程序输出:COPY constructor called ;
3)如果函数的返回值是类A的对象时,则函数返回时,
A的复制构造函数被调用;(这里有点问题)//已解决,是因为devC++对复制构造函数的优化;
但对象间赋值并不导致复制构造函数被调用;
当我们使用常量引用参数时,void fun(CMclass obj_){ cout<< "fun" <<endl;}
可以使用 CM有class&作为参数,来防止调用复制构造函数,来减少开销;
要确保实参的值在函数中不被改变,可加const;
C.波兰(前置)表达式:
2+3 -> + 2 3;(2+3)*4 -> * + 2 3 4;
输入:输入一行,运算符和运算数之间都用空格分隔,运算数是浮点数;
输出:
表达式的值;
波兰表达式定义:
1)一个数是一个波兰表达式,值为该数;
2)”运算符 波兰表达式 波兰表达式“是波兰表达式,值为两个波兰表达式的值运算的结果;
例:
#include<cstdlib>
using namespace std;
double exp(){
char s[20]; // 假设读入的全部小于20;
cin>>s;
switch(s[0]){
case '*': return exp()*exp();
case '/': return exp()/exp();
case '+': return exp()+exp();
case '-': return exp()-exp();
default: return atof(s);
break;
}
}
int main()
{
cout<<exp()<<endl;
return 0;
}
明日计划:析构函数;
相关文章推荐
- 9.4递归例题:逆波兰表达式
- 049day(构造和析构函数的调用时机,递归例题(四则运算表达式求值)的学习)
- 逆波兰表达式 —— 递归专题
- (递归)逆波兰表达式
- 逆波兰表达式(栈,递归)
- C++基础算法学习——逆波兰表达式问题
- 084day(递归例题(全排列和2的幂次方表示)的学习)
- 算法学习——栈的应用之逆波兰(后缀)表达式转换
- 055day(赋值运算符的重载和运算符重载为友元函数,例题算24(递归)学习)
- (12)逆波兰表达式(递归的应用)
- 百炼-2694-逆波兰表达式-C语言-递归
- 【转载】2.2基本算法之递归和自调用函数 逆波兰表达式分析—心机深
- 【Openjudge】你波兰表达式(递归)
- 【递归】 之 逆波兰表达式
- 递归---案例(n皇后问题,逆波兰表达式,)
- 递归练习:逆波兰表达式求解
- 成长轨迹59 【ACM算法之路 百炼poj.grids.cn】【递归】【2694:逆波兰表达式】
- 算法-波兰表达式求值(递归)
- 递归:求波兰表达式
- 递归计算逆波兰表达式