杰 & C++ & Python & DM

关于this指针

      this指针的类型是“指向成员函数所属于的那个类的指针”,也就是说this的类型是“对象名*”。
      每个成员函数所收到的第一个参数就是this指针,但是它是隐含的,编译器在每个成员函数的声明中插入这个隐含参数。
      例如
class Animal
{
      pirvate:
               int ID;
               char* name;
      public:
            ...
            void printName() const
            {
                  cout<<name<<endl;
            }
};
      在这个例子中,printName()成员函数是无参的-至少表面上是这样的。那么,编译器是怎样识别name呢?
      编译器会这样做
             void printName(const Animal* this)
            {
                  cout<<this->name<<endl;
            }
      (有些C程序员十分讨厌C++的也正因如此,“我们不知道C++编译器会背着我们添加什么!”)

      另一方面,正因为this是指针类型,所以,this是一个地址值(虽然这对于普通指针是显然的,但一遇到this,很多人会忘记这一点)。因此,它具备普通指针的性质:this是对象的地址,而*this就是对象的值。    
      最后,不要忘记,this指针仅仅在成员函数内部是合法的。
      
      this指针的概念,在其他OOP语言中同样存在,Smalltalk称之为Self,Eiffel使用Current,或许这两个词更准确一些。

posted on 2009-04-28 18:09 jaysoon 阅读(238) 评论(0)  编辑 收藏 引用 所属分类: C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

收藏夹

C++

搜索

最新评论

阅读排行榜

评论排行榜