【发布时间】:2016-06-16 13:25:00
【问题描述】:
#include<iostream>
using namespace std;
class my_class
{
int m,n;
public:
void show(void);
my_class& test(my_class b)
{
static my_class c;
c.m=m+b.m;
c.n=n+b.n;
return c;
}
my_class(int x,int y) //Parametrized constructor
{
m=x;n=y;
}
my_class(){} //Default consructor
};
void my_class::show(void)
{
cout<<m<<" "<<n;
}
main()
{
my_class a(2,3),b(3,4); //Object initialisation
my_class d=a.test(b);
d.show();
}
函数test 返回对函数中定义的静态对象c 的引用。我得到的输出为5 7。我需要有关以下方面的帮助:
- 我也可以通过返回
my_class而不是my_class&来实现相同的输出。这里按值返回与按引用返回相比如何?在赋值语句my_class d=a.test(b)中将返回引用的数据成员复制到对象d?还是d只是返回引用的别名? 如果我将赋值语句更改为
my_class& d=a.test(b), 即使那样我得到相同的输出。这是否意味着两种方式 上面的说法写对了吗?您能否解释一下这两种类型的具体情况? 赋值语句?
【问题讨论】:
-
(1)
d是从test的返回值引用的对象复制构造的(换句话说,来自c)。 (2)my_class d=a.test(b);是声明,而不是声明。那里没有任务。 (3) 如果您将其设为my_class& d=a.test(b);,那么d将是对c的引用,而不是它的副本。
标签: c++ class return-by-reference