C++引用放的错误

来源:百度知道 编辑:UC知道 时间:2024/06/23 00:42:45
#include<iostream>
using namespace std;
class A
{
public:int const get(){return i;}
A(int){i=1; cout<<"构造函数执行"<<endl;}
A(A&a){i=a.i; cout<<"复制构造函数执行"<<endl;}
~A(){i=0; cout<<"析构函数执行"<<endl;}
private:
int i;
};
A func()
{
cout<<"func函数执行中!"<<endl;
A a(23);
cout<<"对象a的地址:"<<&a<<endl;
return a;
}
int main()
{
A&r=func();
cout<<"对象a的复制的地址:"<<&r<<endl;
cout<<r.get()<<endl;
return 0;
}
为什么返回后值为1而不是我写的23?

A a(23);

//该句话创建A类型对象,赋予23为参数,23为int类型而不是A类型

A(int){i=1;cout<<"复制构造函数执行"<<endl;}

//所以执行改构造函数,i被赋予1,而不是23,参数没有用到语句中,可以改为A(int x){i=x;cout<<"复制构造函数执行"<<endl;}

A(int){i=1; cout<<"构造函数执行"<<endl;}
A a(23);

声明定义时未指定形参,虽然23是int类型,但没给载体让它装23让它传进去,所以任意的int数据最后显示的还是i=1,建议类的声明和定义分开,这是商业代码的规范