3.8.1 常量指针this

2013-10-07 15:31:57 · 作者: · 浏览: 88

3.8.1   常量指针this

在成员函数内部可以用指针常量this来访问与成员函数的调用相关联的对象(this是一个关键字)。

例3-43

 
本例中,构造函数将私有数据成员x初始化为0,该构造函数可以改写为:
 
这种写法是没有必要的,仅仅是为了说明this的语法。如果我们创建一个C对象
 

那么在构造函数调用中,this指向对象c1,即this的值为&c1。

类的公有成员函数经常会访问私有数据成员。如在3.6节的Task类中,成员函数setID和getID就是用来访问表示Task ID的私有数据成员id的。一种形式的定义是:

 
我们用大写字母ID表示参数,以避免与数据成员名id发生冲突。但在给setID这样的成员函数指定参数名时,一些C++(www.cppentry.com)程序员更喜欢用与被访问的数据成员相同的名称,并使用this来避免名称冲突,这样就产生setID的第二种定义形式:
 

表达式this->id访问对象的名为id的数据成员,并且函数的参数名称也是id。

例3-44

假设我们已经设计了一个File类,它有一个成员函数copy,该函数定义为:

 
if语句用来对如下调用进行检测:
 

在这里f1是File的对象,f1以它本身作为参数,调用自己的copy成员函数。copy成员函数中的if语句就是用来防止将一个文件拷贝到它本身这样不合理的做法,其检测办法是判断this与&dest是否指向相同的对象。在实际编程(www.cppentry.com)中这是一种常用的检测手段。

this指针是一个常量,它不能作为赋值、递增、递减等运算的目标对象。此外this只在非static成员函数中用才有效。

例3-45

 

本例有两个错误,在成员函数m中,我们试图给常量this赋值是错误的;而在static成员函数s中,我们试图访问this也是错误的。