C++ primer 十五 this 指针

        对于Stock类,还有很多工作要做。到目前为止,每个类成员函数都只涉及一个对象,即调用它的对象。但有时候方法可能涉及到两个对象,在这种情况下需要使用C++的this指针。

       虽然Stock类声明可以显示数据,但它缺乏分析能力。要让程序知道存储的数据, 最直接的方式是让方法返回一个值。为此,通常使用内联代码,如下例所示: 

class Stock

{

private:

......

double total_val;

public:

double total()const{return total_val;}

}

       就直接程序访问而言,上述定义实际上是使total_vai为只读的。也就是说,可以使用方法total_val() 来获得total_val的值,但这个类没有提供专门用于重新设置total_val的值的方法(作为一种副产品,其他方法,如buy( )、sell()和update()确实在重新设置成员shares和share_val的值的同时修改了total_val的值。
       可以采用另一种方法——一种帮助您了解this指针的方法。这种方法是,定义一个成员函数,它查看两个Stock 对象,并返回其中一个对象的引用。实现这种方法时,将出现一些有趣的问题,下面就来讨论这些问题。
       首先,如何将两个要比较的对象提供给成员函数呢?例如假设将该方法命名为topva(),则函数调用stock1.topva( )将访问stock1对象的数据,而stock2.topval()将访问stock2对象的数据。如果希望该方法对两个对象进行比较,则必须将第二个对象作为参数传递给它。出于效率方面的考虑,可以按引用來传递参数,也就是说,topval()方法使用一个类型为const Stock &的参数,

       其次,如何将方法的答案传回给调用程序呢?最直接的方法是让方法返回一个引用。因此,用于比较的方法的原型如下:

const Stock & topval(const Stock & s) const;

       该函数隐式地访问一个对象,而显式地访问另一个对象,并返回其中一个对象的引用。括号中的const 表明,该函数不会修改被显式地访问的对象:而括号后的const表明,该函数不会修改被隐式地访问的对象。由于该函数返回了两个const对象之一的引用,因此返回类型也应为const引用。
       假设要对Stock对象stock1和stock2进行比较,并将其中较高的那一个赋给top对象,则可以使用下面两条语句之一:

top = stock1.topval(stock2); 

top = stock2.topval(stock1);

       第一种格式隐式地访问Stock1,而显式地访问Stock2:第二种格式显式地访问Stock1,而隐式地访问stock2 。无论使用哪一种方式,都将对这两令对象进行比较,并返较高的那一个 对象。

const Stock & Stock::topval(const Stock & s) const
{

if (s.total_val > total_val)

return s; // argument object

else

return *this; // invoking object

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值