C++常量指针this
在每一个成员函数中都包含一个常量指针,我们称其为 this 指针。this 是 C++ 的一个关键字,this 指针指向调用本函数的对象,其值为该对象的首地址。通过该指针,我们可以在成员函数的函数体内访问对象。
【例 1】
【例 2】
【例 3】
【例 4】
【例 5】
this 指针是常量指针,它的值是不能被修改的,一切企图修改该指针的操作如赋值、递增、递减等都是不允许的。此外 this 指针只非 static 成员函数中才是有效的,这一点在我们介绍完 static 成员函数后大家就会明白为何会如此了,在此处暂时只要知道这一点就可以了。
【例 6】
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
【例 1】
class book { public: book(){this->price = 0.0; this->title = NULL;} private: double price; char * title; };例 1 向我们展示了 this 指针的使用方法。当然在我们在实际的程序设计中并不需要如此,这样写未免太麻烦了,例 1 只是做介绍 this 指针基本语法所用。在实际设计程序时只需要按照例 2 就行。
【例 2】
class book { public: book(){price = 0.0; title = NULL;} private: double price; char * title; };通常我们在设计成员函数时会将形参与成员变量设计成同一个名字,如例 3 所示,此时函数定义的时候
price = price;
这样的程序看起来总是有些别扭的。这个使用如果使用 this 指针则就能很明朗的进行区分两个 price 了。【例 3】
void setprice(double price) { price = price; }
【例 4】
void setprice(double price) { this->price = price; }如例 4 所示,利用 this->price 表明前面一个 price 为类中的成员变量,而后面一个 price 为形参中的 price。this 指针在此时避免命名冲突产生理解上的歧义。
【例 5】
#include<iostream> using namespace std; class book { public: book(){price = 0.0; title = NULL;} void copy(book &b); private: double price; char * title; }; void book::copy(book &b) { if(this == &b) { cout<<"same object!"<<endl; return; } else { price = b.price; } } int main() { book Alice; book Harry; Harry.copy(Alice); Harry.copy(Harry); return 0; }在本例中,我们为 book 类新增了一个 copy() 函数,即将 book 类对象拷贝给调用 copy() 函数的对象,在函数体中,我们用 this 指针先判断被拷贝的对象的引用是否是调用该函数的对象自身,如果是的话则推出函数。在主函数中
Harry.copy(Harry);
就是拷贝自身,这样的事情当然是我们不希望看到的,因此直接退出函数。这在程序设计过程中也是一种常用的检测手段。this 指针是常量指针,它的值是不能被修改的,一切企图修改该指针的操作如赋值、递增、递减等都是不允许的。此外 this 指针只非 static 成员函数中才是有效的,这一点在我们介绍完 static 成员函数后大家就会明白为何会如此了,在此处暂时只要知道这一点就可以了。
【例 6】
class book { public: book(){price = 0.0; title = NULL;} static void setprice(double price) { this->price = price;//compile error } private: double price; char * title; };在例 6 中,this 指针出现在 static 成员函数中,编译出错。this 指针只能用于非静态成员函数内。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。