当前位置: 首页 > article >正文

C++基础学习记录—this指针

1、概念

1、this指针是一个特殊的指针,存储的对象的首地址,成员函数(类内)都隐含一个this指针。

2、类的成员函数(包括构造函数和析构函数)中都有this指针,因此this指针只能在类内部使用。

3、哪个对象调用成员函数,this指针就指向哪个对象,访问哪个对象的属性。虽然不用手写this指针,但是编译器都会使用this指针来调用成员。

#include<iostream>

using namespace std;

class Test{
private:
    string name;
public:
    //this可以用来区分同名参数和成员属性
    Test(string name){
        this->name = name;
    }

    void test_this(){
        cout << this << endl;
    }

    void show(){
        //只有对象才能调用成员,非重名情况编译器自动添加this
        cout << name << endl;
        cout << this->name << endl;
        this->test_this();
    }
};

int main(){
    Test t1("admin");
    t1.show();

    return 0;
}

2、应用

1、区分同名参数和成员属性

        可以用this指针来区分同名参数和成员属性

2、类中成员的调用都是依赖于this指针的

        类中成员的调用都是依赖于this指针的,默认情况下由编译器自动添加

3、链式调用

        当返回值是对象引用时,可以返回*this,此函数支持链式调用。

支持链式调用的成员函数的特点:

1、返回值类型是当前类的引用

2、return后面是 *this

#include <iostream>

using namespace std;

class Test{
private:
    int num;
public:
    Test(int num)//1、可以用this指针来区分同名参数和成员属性
    {
        this->num=num;
    }
    //num 读接口
    int get_num()
    {
        //2、类中成员的调用都是依赖于this指针的,默认情况下由编译器自动添加
        return  this->num;//就是return num
    }

    //num进行add操作  3、链式调用
    //当返回值类型时对象引用时,可以返回*this,此函数支持链式调用
    Test& add(int n)
    {
        num += n;
        return *this;
    }
};


int main()
{
    Test t1(2);
    cout << t1.get_num() <<endl;//2
//    t1.add(3);
//    cout << t1.get_num() <<endl;
//    t1.add(4);
//    cout << t1.get_num() <<endl;
//    t1.add(100);
//    cout << t1.get_num() <<endl;

    //链式调用  可以对上述代码进行简写
    cout << t1.add(3).add(4).add(100).get_num() << endl;

    return 0;
}


http://www.kler.cn/a/543181.html

相关文章:

  • git学习【个人记录b站尚硅谷】
  • 【NLP 21、实践 ③ 全切分函数切分句子】
  • JavaScript相关知识点
  • Moretl 增量文件采集工具
  • 《DeepSeek技术应用与赋能运营商办公提效案例实操落地课程》
  • 在亚马逊云科技上云原生部署DeepSeek-R1模型(下)
  • uniApp 实现下拉框自定义标签 label 和值 value
  • 【C++】25.封装红黑树实现mymap和myset
  • ANR学习
  • 20250212:sigmastar系列1-获取UUID
  • Web项目测试专题(六)压力测试
  • IDEA中打包maven项目,提示Compilation failure
  • 政安晨的AI大模型训练实践 六 - open-webui vLLM 运行
  • python自动化测试之Pytest断言及Allure报告定制
  • 跟着李沐老师学习深度学习(七)
  • 三角测量——用相机运动估计特征点的空间位置
  • JavaSE基本知识补充 -Map集合
  • DeepSeek与核货宝订货系统的协同进化:智能商业范式重构
  • AI大模型介绍yolo
  • P5:使用pytorch实现运动鞋识别
  • 碰一碰发视频源码技术开发,支持OEM
  • 蓝桥杯 Java B 组之排序算法(冒泡、选择、插入排序)
  • 如何在VSCode中免费使用DeepSeek R1:本地大模型编程助手全攻略
  • Visual Studio 使用 “Ctrl + /”键设置注释和取消注释
  • 【问】强学如何支持 迁移学习呢?
  • 使用Python爬虫获取淘宝Custom API接口数据