首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

新手有关问题求解

2013-07-01 
新手问题求解C++那本书里,在类那一章的代码:const Stock & topval(const stock & s)const这段代码我始终无

新手问题求解
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;
}

热点排行