返回对象的函数问题!
问题1:实参传值给行参(不是对象的引用,也不是对象指针,就是class var),要调用拷贝构造函数吗?
问题2:返回一个对象的时候,钱能的那本书上,说要建立一个临时对象(建立的过程中要调用拷贝构造函数),再把这个临时对象再用拷贝构造函数给主函数里的对象赋值!可是我的发现并不是调用构造函数阿,谁能说说原因阿?!
例如!
#include<iostream.h>
class X
{
public:
X(int ia)
{
ia=2;
n++;
cout<<"creat a X!"<<" "<< n<<endl;
}
X(X& b)
{
ia=b.ia;
n++;
cout<<"used a copy construction!"<<" "<<n<<endl;
}
~X()
{
cout<<"delete a class"<<" "<<n<<endl;
n--;
}
void show(){ cout<<"\n"<<n<<endl;}
private:
int ia;
static int n;
};
int X::n=0;
X f()
{
cout<<"\nin funtion!"<<endl;
X b(1);
return b;
}
void main()
{
X b=f(); //按钱能的书上说该有两次的拷贝构造函数!可是结构只有一次!
}
问题3:下面这个程序,为什么结构不同,大家说说,看我的理解对不对!
××××××××××××××××××××
@@@ 为什么这两个 主程序运行后 的结果不同???
#include<iostream.h>
class X
{
public:
X(int ia)
{
ia=2;
n++;
cout<<"creat a X!"<<" "<< n<<endl;
}
X(X& b)
{
ia=b.ia;
n++;
cout<<"used a copy construction!"<<" "<<n<<endl;
}
~X()
{
cout<<"delete a class"<<" "<<n<<endl;
n--;
}
void show(){ cout<<"\n"<<n<<endl;}
private:
int ia;
static int n;
};
int X::n=0;
X f(X b)
{
cout<<"\nin funtion!"<<endl;
return b;
}
/*void main() ////第一种情况
{
X a(1);
X c(2);
X b=f(c);
b.show();
}
*/
void main() ////第二种情况
{
X a(1);
X b=f(X(2));
b.show();
}