+ -
当前位置:首页 → 问答吧 → 临时对象问题

临时对象问题

时间:2011-12-02

来源:互联网

以下是两段代码:

代码1:
C/C++ code
#include <iostream>
using namespace std;

class Point 
{
private:
  int x;
  int y;
public:
    Point(int, int);
    Point(const Point &);
    ~Point();  
    Point operator =(Point);
};

Point::Point(int i, int j)
{ 
    x = i; 
    y = j;  
    cout<<"调用一般构造函数"<<endl;
}  

Point::Point(const Point & p)
{
    x = p.x;
    y = p.y;
    cout<<"调用拷贝构造函数"<<endl;
}

Point::~Point()  
{
    cout<<"调用析构函数"<<endl;  
}

Point Point::operator =(Point p)
{ 
    x = p.x; 
    y = p.y;
    cout<<"重载赋值运算符函数"<<endl;
    return (*this);
}

int main( )
{ 
    Point pa(20, 35), pb(10, 10);
    cout<<endl;
    pa = pb;
    cout<<endl;
    return 0;
}  


这是输出结果:

调用一般构造函数
调用一般构造函数

调用拷贝构造函数 //调用 = 重载运算符之前,会先调用拷贝构造函数,将pb赋值给形参Point P
重载赋值运算符函数
调用拷贝构造函数
调用析构函数
调用析构函数

调用析构函数
调用析构函数



代码2:

C/C++ code
#include <iostream>
using namespace std;

class Point 
{
private:
  int x;
  int y;
public:
    Point(int, int);
    Point(const Point &);
    ~Point();  
    Point operator =(Point);
};

Point::Point(int i, int j)
{ 
    x = i; 
    y = j;  
    cout<<"调用一般构造函数"<<endl;
}  

Point::Point(const Point & p)
{
    x = p.x;
    y = p.y;
    cout<<"调用拷贝构造函数"<<endl;
}

Point::~Point()  
{
    cout<<"调用析构函数"<<endl;  
}

Point Point::operator =(Point p)
{ 
    x = p.x; 
    y = p.y;
    cout<<"重载赋值运算符函数"<<endl;
    return (*this);
}

Point func(Point p)
{ 
    cout<<"已经进入到func( )的函数体内"<<endl;
    Point temp(5, 5);
        return temp;
}

int main( )
{ 
    Point pa(20, 35), pb(1, 2);
    cout<<endl;
    pa = func(pb);
    cout<<endl;
    return 0;
}  


这是输出结果:

调用一般构造函数
调用一般构造函数

调用拷贝构造函数
已经进入到func( )的函数体内
调用一般构造函数
调用拷贝构造函数
调用析构函数
调用析构函数
重载赋值运算符函数
/*
函数func()返回一个临时对象,将这个临时对象赋值给pa时,会调用 = 运算符重载函数,在调用 = 运算符重载函数之前,应该会去调用拷贝构造函数,将这个临时对象赋值给形参Point p,可是却并没有调用拷贝构造函数
*/调用拷贝构造函数
调用析构函数
调用析构函数

调用析构函数
调用析构函数


所以我想问一下,为什么会出现这种差异??

作者: JZY4077   发布时间: 2011-12-02

据说编译器是会优化一些东西的

作者: gykgod   发布时间: 2011-12-02

把Point operator =(Point);
改成 Point& operator =(const & Point);
运行一下

作者: Rotaxe   发布时间: 2011-12-02

热门下载

更多