注册 登录
编程论坛 C++教室

新人请教this指针

qq263640010 发布于 2012-02-04 17:42, 571 次点击
class ww
{
public:
    ww(){a=10;}
    ~ww(){}
    const ww& operator++()
private:
    int a;
};

const ww& ww::operator++()
{    ++a;
return *this;
}

我是新手 我知道类中隐含this。
 这里为什么要使用返回this指针呢?
请大哥大姐指导。
5 回复
#2
lz10919149992012-02-04 18:43
因为operator++的返回值是const ww&,所以要返回当前对象的引用(*this代表当前对象,因为this是当前对象的指针),返回这个对象引用的目的主要是为了方便一些连接运算,比如:
ww w;
(++w).f();
但f()必须是常成员函数(返回类型前面加了const),因为这是前缀++,所以更好的方法是把operator++的返回值修改为ww&,这样就能使用该类的所有的公共成员。
#3
qq2636400102012-02-04 21:02
回复 2楼 lz1091914999
多谢  但我真的理解不了
#4
pangding2012-02-04 21:21
楼主可以试试体会这个:
程序代码:
#include <iostream>
using namespace std;

int main()
{
    int a = 5;

    ++(++a);    // a -> 7
    ++(a++);    // Error!

    return 0;
}

第一句话是对的,之后 a 应该变成 7。
这说明,++a 之后 "返回" 的东西依然是 a,可以用来再次 ++a;
而第二个不行。因为 a++ 返回的仅是 a 还没有增加前的值,不是 a 本身了。

如果你自己想写个函数,也有类似内置 前++ 的特性,那么也要返回对象本身。
可是如何这样做呢?
众所周知,this 是指向当前对象的指针,返回它只是返了个指针,这不是我们要的。我们要的是当前的对象,也就是指针指向的那个东西,所以是 *this。
楼主应该接触过 * 这个运算符吧?
#5
BianChengNan2012-02-08 09:15
以下是引用lz1091914999在2012-2-4 18:43:07的发言:

因为operator++的返回值是const ww&,所以要返回当前对象的引用(*this代表当前对象,因为this是当前对象的指针),返回这个对象引用的目的主要是为了方便一些连接运算,比如:ww w;
(++w).f();但f()必须是常成员函数(返回类型前面加了const),因为这是前缀++,所以更好的方法是把operator++的返回值修改为ww&,这样就能使用该类的所有的公共成员。
顶,果然有Bruce Eckel 的风范
#6
BianChengNan2012-02-08 14:44
以下是引用lq7350684在2012-2-8 13:29:16的发言:

理解不了。
???兄弟开玩笑呢吧?
1