Problem of returning an object at friend operator and general function
Hello, everyone. I have a problem while programming. Please refer to the
code below:
----------------------------------------------------
#include <iostream>
using namespace std;
class T
{
public:
T() { id=++count;cout<<"T constructor! ID="<<id<<endl;}
~T() { cout<<"T destructor! ID="<<id<<endl;}
T(const T& cp) { cout<<"T copy-constructor! source ID="<<cp.id<<"
this ID="<<id<<endl; id=cp.id+10; }
T operator=(const T& data) { cout<<"T operator=! source
ID="<<data.id<<" this ID="<<id<<endl;
this->id=data.id+100;
return *this;}
double ShowID(void) { return id; }
operator double() { return id; }
friend T operator+(const T& a,const T& b);
private:
static int count;
double id;
};
int T::count=0;
T operator+(const T& a,const T& b)
{
T c;
c.id=a.id+b.id/10;
return c;
}
T x(T t)
{
cout<<"inside x(): t ID="<<t.ShowID()<<endl;
return t;
}
int main(void)
{
T a,b;
cout<<(a+b).ShowID()<<endl;
cout<<x(a)<<endl;
}
----------------------------------------------------
The result of the program is (compiled by g++ 4.1.2):
T constructor! ID=1
T constructor! ID=2
T constructor! ID=3
1.2
T destructor! ID=1.2
T copy-constructor! source ID=1 this ID=-1.44066e-39
inside x(): t ID=11
T copy-constructor! source ID=11 this ID=-3.09432e-39
21
T destructor! ID=21
T destructor! ID=11
T destructor! ID=2
T destructor! ID=1
It revealed the fact that although both operator+() and x() returned an
object, the latter called the copy-constructor while the prior did not. Why
I get such result? And why C++ is designed in this way? Thanks a lot for
your answer!
--
Why I must use FORTRAN not C++ in the laboratory...
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]