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也是错误的。