047day(复制构造函数和递归例题(波兰表达式)的学习)
来源:互联网 发布:上海特效牙膏知乎 编辑:程序博客网 时间:2024/06/03 19:40
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;
}
明日计划:析构函数;
- 047day(复制构造函数和递归例题(波兰表达式)的学习)
- 049day(构造和析构函数的调用时机,递归例题(四则运算表达式求值)的学习)
- 055day(赋值运算符的重载和运算符重载为友元函数,例题算24(递归)学习)
- 逆波兰表达式(递归)
- (递归)逆波兰表达式
- 9.4递归例题:逆波兰表达式
- 048day(类型转换构造函数和析构函数的学习)
- 041day(熄灯问题的程序和构造函数的学习)
- (12)逆波兰表达式(递归的应用)
- 【Openjudge】你波兰表达式(递归)
- poj 2694 逆波兰表达式(递归)
- 035day(枚举例题(完美立方)的学习和引用的学习)
- 040day(枚举例题(熄灯问题)的学习)
- 波兰表达式和逆波兰表达式(栈)
- C++复制构造函数(深复制和浅复制)
- 算法学习之递归--逆波兰表达式
- 构造函数和复制构造函数(转)
- C++例题分析2,复制构造函数
- go语言中数组与切片的区别
- ORA-19698: D:ORACLEORADATALBMISREDO01.LOG 来自不同数据库: id=3075821044, db_ name=LBMIS
- 选择排序
- Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法
- ffmpeg系列:基于QT的播放器界面绘制
- 047day(复制构造函数和递归例题(波兰表达式)的学习)
- 考研倒计时30天的感想
- go语言中数组与切片的区别
- 如何使背景图片自适应屏幕
- Java面向对象三大特征之继承
- 51Nod 1305 Pairwise Sum and Divide
- aspx,ascx和ashx使用小结
- MongoDB笔记三
- 20171126