C++面向对象入门(十五)this指针
this指针: C++在类的非静态成员函数隐含的指向调用成员函数的当前对象的指针
本质:指针常量(不可修改指针指向)
作用:
1, 解决成员函数参数和类成员变量的名称冲突
2, 使用*this即可返回调用函数的对象本身
注意事项:
1, 欲返回当前对象本身, 成员函数的返回值类型必须是当前对象所属类(包括父类)的引用类型,
否则会产生在链式调用时会产生多个对象, 但是链式调用的结果是调用一次该成员函数的结果
#include <iostream> #include <string> using namespace std; /** * this指针: C++在类的非静态成员函数隐含的指向调用成员函数的当前对象的指针 * 作用: * 1, 解决成员函数参数和类成员变量的名称冲突 * 2, 使用*this即可返回调用函数的对象本身 * 注意事项: * 1, 欲返回当前对象本身, 成员函数的返回值类型必须是当前对象所属类(包括父类)的引用类型, * 否则会产生在链式调用时会产生多个对象, 但是链式调用的结果是调用一次该成员函数的结果 */ class Rider { public: Rider() { } Rider(const string &name, const string &model, const string &driver) : name(name), model(model), driver(driver) { } ~Rider() { cout << model << " UntransForm" << endl; } Rider(const Rider &rider) { cout << "Copy Rider, and Model is " << rider.model << endl; } Rider &changeModel(const string &model) { this->model = model; return *this; } Rider changePattern(const string &pattern) { this->model = pattern; return *this; } void showModel() { cout << model << endl; } private: string name; string model; string driver; }; void test1() { Rider zeroOne = {"Zero-One","Rising Hopper","Hiden Aruto"}; //使用*this作为返回值, 并且返回类型为Rider对象的引用类型, 可实现链式调用, 调用该函数不调用析构函数和拷贝复制构造函数 zeroOne.changeModel("Biting Shark").changeModel("Flying Falcon").changeModel("Flaming Tiger").showModel(); } void test2() { Rider zeroOne = {"Zero-One","Rising Hopper","Hiden Aruto"}; //使用*this作为返回值, 并且返回类型为Rider对象类型, 每次调用调用一次拷贝复制构造函数和析构函数 zeroOne.changePattern("Biting Shark").changePattern("Flying Falcon").changePattern("Flaming Tiger").showModel(); } int main() { // test1(); //output: //Flaming Tiger //Flaming Tiger UntransForm test2(); //output: //Copy Rider, and Model is Biting Shark //Copy Rider, and Model is Flying Falcon //Copy Rider, and Model is Flaming Tiger // // UntransForm //Flaming Tiger UntransForm //Flying Falcon UntransForm //Biting Shark UntransForm system("pause"); return 0; }
路漫漫其修远兮,吾将上下而求索。