您的位置:首页 > 其它

第八天2017/04/17(1、拷贝构造、❤临时对象)

2017-04-17 19:42 176 查看
调用拷贝构造函数的三种case

1. MyPoint p2 = p1;  MyPoint p2(p1);
case1中的重点:MyPoint p3 = MyPoint(3,3); //此时:C++编译器进行优化,
//只调用一次构造函数(并不涉及拷贝构造函数的调用)
2. 形参:类对象,实参:类对象
3. 返回值:类对象

/*总结与技巧:
一定要区分等号的两种含义:其中一种是拷贝、另外一种是简单赋值。
临时对象析构的时间是遇到主调函数中的第一个分号“;”。
*/
#include <iostream>
using namespace std;
class MyPoint
{
public:
MyPoint()
{
cout<<(int)this<<"构造函数"<<endl;
}
MyPoint(const MyPoint& obj)
{
cout<<(int)this<<"拷贝构造函数"<<endl;
}
MyPoint& operator=(const MyPoint& obj)
{
cout<<"赋值等号操作"<<endl;
return *this;
}
~MyPoint()
{
cout<<(int)this<<"析构函数"<<endl;
}
};
void f1(MyPoint p)
{

}
MyPoint f2()
{
MyPoint p;
return p;
}

int main()
{
//case1:
MyPoint p1;   //构造函数
MyPoint p2 = p1;   //MyPoint p2(p1);  //拷贝构造函数
//case1中的重点
MyPoint p3 = MyPoint(); //【重点】C++编译器进行了优化,只调用——>构造函数
//case2:
MyPoint qq;  //构造函数
f1(qq);   //拷贝构造函数tmp、析构tmp
//case3:区分下面两种情形,对比分析
qq = f2(); //构造函数p、拷贝构造函数tmp、析构函数p、赋值=、析构函数tmp
MyPoint pp = f2(); //构造函数p、拷贝构造函数tmp、析构函数p

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: