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

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(){//只有对象才能调用成员,非重名情况编译器自动添加thiscout << 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;
}

附加面试题:new的过程(创建对象的过程):

  1. 内存分配
  • new运算符首先调用底层的内存分配函数(通常是operator new),为对象分配足够的内存空间。
  • 如果内存分配失败(例如,由于内存不足),operator new会抛出一个std::bad_alloc异常。
  1. 构造函数调用
  • 一旦内存分配成功,new运算符会在分配的内存上调用对象的构造函数来初始化对象属性。
  • 这意味着对象的成员变量会被初始化,并且任何在构造函数中编写的初始化代码都会被执行。
  1. 返回指针
  • 最后,将初始化过的对象的首地址赋值给this, 并将this返回。

http://www.mrgr.cn/news/90511.html

相关文章:

  • Python----PyQt开发(PyQt高级:手搓一个简单的记事本)
  • PySide6 异步执行任务开发指南
  • apachePoi中XSSFClientAnchor图片坐标简述;填充多张图片
  • AJAX项目——数据管理平台
  • 数智融合:如何利用大模型解决离线数仓历史项目烟囱式开发的完整解决方案
  • 使用 mkcert 本地部署启动了 TLS/SSL 加密通讯的 MongoDB 副本集和分片集群
  • c#中“事件-event”的经典示例与理解
  • c++ 多线程知识汇总
  • 开发一个类似小红书的社交电商平台需要综合技术、产品和运营能力
  • 自然语言处理NLP入门 -- 第一节基础概念
  • 黑马Mistral Le chat逆转deepseek
  • 【NLP 21、实践 ③ 全切分函数切分句子】
  • lvsDR模式实现
  • Elasticjob在同一个实例上运行的多个分片任务
  • Flask Web开发的重要概念和示例
  • 洛谷 P4552 [Poetize6] IncDec Sequence
  • 阿里云 DeepSeek 模型部署与使用技术评测
  • 机器学习 - 机器学习模型的评价指标
  • 十大知识领域中涉及到的工具与技术(三)
  • 数据类型/运算符/输入与输出/注释
  • 【云安全】云原生-K8S API Server 未授权访问
  • Openssl的使用,CA证书,中间证书,服务器证书的生成与使用
  • ffmpeg学习:ubuntu下编译Android版ffmpeg-kit
  • java lambda表达式
  • Cherry Studio 连接私域deepseek-r1模型搭建私域知识库和智能体(也可使用第三方模型)
  • 从零开始搭建一个英语学习网站