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;
}

 

posted @ 2020-08-20 10:40  DNoSay  阅读(215)  评论(0编辑  收藏  举报