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;
}





明日计划:析构函数;



阅读全文
0 0
原创粉丝点击