有关返回对象的说明

返回指向const对象的引用

Vector force1(50,60);
Vector force2(10,70);
Vector max;
max=MAX(force1,force2);

//version 1
Vector Max(const Vector & v1,const Vector & v2)
{
}
//version 2
const Vector &Max(const Vector & v1, const Vector & v2)
{
}
返回对象将调用复制构造函数,而返回引用不会,第二个版本所做的工作更少吗,效率更高。引用指向的对象应该在调用函数执行时存在,force1 和 force2都是在调用函数中定义的。v1和v2都被声明为const类型,返回类型必须为const这样才匹配。

返回指向非const对象的引用

两种常见的返回非const对象的情形是,重载复制操作符与cout一起使用的<<操作符。

operator=()的返回值用于连续赋值:

String s1(" Good stuff");
String s2,s3;
s3=s2=s1;
s2.operator(s1)的返回值赋给s3,为此,返回String对象或String对象的引用都是可行的,通过使用引用,避免使用复制构造函数。在这个例子中,返回类型不是const,因为方法operator=()返回一个指向s2的引用,可以对其进行修改。

operator<<()的返回值用于串接输出

String s1(" Good stuff");
cout<<s1<<"is coming!";
返回类型必须是ostream &,而不能仅仅是ostream。如果使用返回类型ostream,将要求调用ostream类的复制构造函数,而ostream没有公有的复制构造函数。返回一个指向cout的引用不会带来任何问题,因为cout已经在调用函数的作用域内。


返回对象

Vector force1(50,60);
Vector force2(10,70);
Vector net;
net=force1+force2;
Vector Vector::operator+(const Vector &b) const
{
	return Vector(x+b.x,y+b.y);
}
被返回的不是force1,也不需要force2,force1和force2在这个过程中应该保持不变。因此返回值不能是指向在调用函数中已经存在的对象的引用。在Vector::operator+()中计算得到的两个矢量的和被保存在一个新的临时对象中,该函数不应返回一个指向临时对象的引用,而应该返回实际的Vector对象。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值