新手问题求解
C++那本书里,在类那一章的代码:const Stock & topval(const stock & s)const
这段代码我始终无法理解,望指点!
我是这么认为的:
1.创建一个topval 函数,该函数是返回一个stock类的对象,并且该对象是const
2.参数也是一个stock的对象的引用,并且也是const的
3.最后1个const表明是常量函数,反正就是数据不能修改
问题是stock & topval,这里为什么一定要有个&呢,不能就直接写成const Stock topval(const stock & s)const吗?
[解决办法]
这应该是某个类的成员函数,否则最后一个const声明是不允许的。
最后一个中把成员函数声明为const,它表明这个成员函数不会改变它所属对象的状态,可以对常量对象调用这个函数:
class C
{
public:
void fun1();
void fun2()const;
};
...
C a;
C const b;
a.fun1();//OK
a.fun2();//OK
b.fun1();//错误!不能对常量对象调用非常量非静态成员函数。
b.fun2();//OK
const Stock &类型的返回值表明它返回的是一个Stock常量对象的引用。如果把它去掉,则返回的是一个值对象,将会发生对象拷贝。
返回const reference的原因可能有:
1.Stock对象是不可以复制的,比如类似于流类的功能
2.Stock对象的复制很慢,或很耗费空间。
如果没有以上原因,返回值更加常见,因为反回引用会限制函数的实现,必须返回一个成员变量/静态变量/全局变量的引用,而返回值对象还可以返回局部变量。
[解决办法]
返回对象的引用跟直接返回对象的值是不一样的。。可以看看下边的例子。。
#include <iostream>
using namespace std;
class A{
public:
A(int i = 0): x(i){}
void setx(int i){ x = i;}
int getx(){ return x;}
A fun1(A &a){ return a;}
A& fun2(A &a){ return a;}
private:
int x;
};
int main(){
A a(1);
a.fun1(a).setx(3);
cout<<a.getx()<<endl;
a.fun2(a).setx(4);
cout<<a.getx()<<endl;
return 0;
}