C++——this指针

this就是一个指针,指向当前对象,当前调用成员函数的这个对象,它在每个非静态成员对象中都隐式存在。

成员函数的调用者是谁,this就指向谁

一、在非静态成员函数中

ClassName* const this

以这样的形式存在,const在类型后面表示它的指向不能被修改,只能指向该对象,不过可以修改当前对象的内容

二、调用形式

1、修改对象内容

这份代码,如果没有使用this->age进行修改的话,同名的形参无法给内置类型成员age进行修改,但用下面的方式就可以进行修改。

cpp 复制代码
class Person {
private:
    int age;
public:
    void setAge(int age) {
        this->age = age; // 使用 this 区分成员变量和形参
    }
};

2、链式调用

this指向当前对象

*this是当前对象的引用

返回 *this 可让调用者继续使用当前对象执行下一个操作。

cpp 复制代码
class Point {
private:
    int x, y;
public:
    Point& setX(int x) { this->x = x; return *this; }
    Point& setY(int y) { this->y = y; return *this; }
};

int main() {
    Point p;
    p.setX(10).setY(20); // 链式调用
}

3、在类内当做其他成员函数的参数

在类的内部,把当前对象传递给其他的成员函数

cpp 复制代码
class Dog {
public:
    void bark() { std::cout << "Woof!\n"; }
    void playWith(Dog& other) {
        std::cout << "Playing with another dog\n";
    }
    void invitePlay() {
        playWith(*this); // 将当前对象传给另一个函数
    }
};

三、this在const成员函数中的使用

类型名前面的const表示其内容无法进行修改

cpp 复制代码
const ClassName* const this;
cpp 复制代码
class Box {
private:
    int width;
public:
    void show() const {
        // this->width = 10; // ❌ 错误,不能修改
        std::cout << this->width << std::endl;
    }
};

四、静态成员函数没有this指针

cpp 复制代码
class Counter {
private:
    static int count;  // 静态成员变量(所有对象共享)
    int id;            // 普通成员变量
public:
    Counter() { count++; id = count; }

    static void showCount() {
        cout << "count = " << count << endl; // ✅ 可访问静态变量
        // cout << id; // ❌ 错误:静态函数中没有 this
    }
};
int Counter::count = 0; // 静态变量定义
相关推荐
伊灵eLing29 分钟前
GoLang 语言基础
开发语言·后端·golang
两年半的个人练习生^_^29 分钟前
JMM 进阶:彻底理解 synchronized 实现原理
java·开发语言
小白不白11131 分钟前
Invoke的用法
开发语言·人工智能·数码相机·计算机视觉·c#
techdashen35 分钟前
What is maintenance, anyway?
开发语言·后端·rust
万法若空37 分钟前
C/C++基本类型表示范围
c语言·开发语言·c++
yijianace40 分钟前
Python爬虫实战:BooksToScrape 多线程爬取与图片下载
开发语言·爬虫·python
凡人叶枫1 小时前
Effective C++ 条款15:在资源管理类中提供对原始资源的访问
linux·开发语言·c++·stm32·单片机
swordbob1 小时前
Spring Boot 2.0 改 CGLIB 后,接口实现是否有影响
java·开发语言·spring
郝学胜-神的一滴1 小时前
中级OpenGL教程 009:用环境光告别模型死黑
前端·c++·unity·godot·图形渲染·opengl·unreal
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第106题】【并发篇】第6题:synchronized 锁的锁对象可以是什么?
java·开发语言·面试