首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++中'this'指针的用例

在C++中,'this'指针是一个指向当前对象的指针,它在类的成员函数中使用。它的主要用例包括:

  1. 类型转换:'this'指针可以用于将当前对象的指针转换为其基类指针。
代码语言:cpp
复制
class Base {
public:
    void show() {
        cout << "Base class show function"<< endl;
    }
};

class Derived : public Base {
public:
    void show() {
        cout << "Derived class show function"<< endl;
    }

    void call_base_show() {
        this->Base::show(); // 使用 'this' 指针调用基类的 show 函数
    }
};
  1. 比较两个对象是否相等:'this'指针可以用于比较两个对象是否相等。
代码语言:cpp
复制
class MyClass {
public:
    int id;

    MyClass(int id) {
        this->id = id;
    }

    bool isEqual(MyClass& other) {
        return this == &other; // 比较两个对象的地址
    }
};
  1. 返回当前对象的引用:'this'指针可以用于返回当前对象的引用。
代码语言:cpp
复制
class MyClass {
public:
    int value;

    MyClass(int value) {
        this->value = value;
    }

    MyClass& setValue(int value) {
        this->value = value;
        return *this; // 返回当前对象的引用
    }
};
  1. 防止对象被拷贝:'this'指针可以用于防止对象被拷贝。
代码语言:cpp
复制
class MyClass {
public:
    MyClass() {
    }

    MyClass(const MyClass& other) = delete; // 禁止拷贝构造函数
    MyClass& operator=(const MyClass& other) = delete; // 禁止拷贝赋值运算符
};

总之,'this'指针在C++中的用例非常广泛,可以帮助我们更好地管理和操作对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++C++ this 指针用法 ① ( C++ this 指针引入 | this 指针用法 | 代码示例 )

一、C++ this 指针 1、C++ this 指针引入 在 C++ , this 指针 是一个特殊指针 , 由系统自动生成 , 不需要手动声明定义 , 在类每个 非静态成员函数... , 都可以调用 this 指针 ; this 指针 是指向 调用对象 自身 指针 , 也就是调用 该成员函数 实例对象 内存地址 ; 由于 this 指针只能在 非静态成员函数内部使用..., 因此 this 指针是类内部使用指针 , 使用 this 可以访问 实例对象 所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++...this 指针用法 C++ this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 , 直接使用 this 作为 本实例对象 指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 在 非静态成员函数 , 直接使用如下语法 , 访问 本实例对象 非静态成员变量 ; 先获取指针指向数据 然后访问数据成员变量 ; (*this).成员变量名 在 C++

31520

C++this指针本质

一直以来对C++this不理解,只知道在构造函数,如果构造函数参数和类成员名字一样的话,就可以this指针来区分,如: this->a = a; 一直以来都有这个疑问:this究竟是什么?...我们明明没有定义这个this,但是我们可以直接而编译器不会报错。今天来解决这个疑问。...从刚才代码,我们”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++指针就是地址,因此很容易想到,this也是一个地址。但是问题来了,this是谁地址呢?...我们看下面这个很简单C++程序: #include class A { public: A(); }; A::A() { std::cout << "this...::endl; } int main() { A a; std::cout << "&a " << &a << std::endl; return 0; } 大家先在自己脑袋运行一下这个程序

75730
  • 浅析C++this指针

    下面通过查看上面代码VC 2005编译后汇编代码来详细解释一下神奇this指针。...看call 3那行C++代码汇编代码就可以看到this指针跟一般函数参数区别:一般函数参数是直接压入栈(push 0Dh),而this指针却被放到了ecx寄存器。...在类非成员函数如果要用到类成员变量,就可以通过访问ecx寄存器来得到指向对象this指针,然后再通过this指针加上成员变量偏移量来找到相应成员变量。...: 1、将ecx寄存器值压栈,也就是把this指针压栈。...通过上面的分析,我们可以从底层了解了C++this指针实现方法。虽然不同编译器会使用不同处理方法,但是C++编译器必须遵守C++标准,因此对于this指针实现应该都是差不多

    75610

    c++ this指针详解

    大家好,又见面了,我是你们朋友全栈君。 this 是 c++一个关键字,也是一个常量指针,指向当前对象,也就是当前对象首地址。通过this指针,可以访问当前对象成员变量和成员函数。...this指针类型是 类类型* const 2. this指针并不是对象本身一部分,不会影响sizeof结果 3. this作用域在类成员函数内部 4....只有在类非静态成员函数才可以使用this指针 所谓的当前对象,就是正在使用对象,例如stu.print(); stu 就是当前对象,系统正在访问stu成员函数print() 假设this指向stu...上面的例子创建stu1时,this指针就指向了stu1所在内存块首字节,创建stu2时,this指针就指向了stu所在内存块首字节… 现在添加下面的函数 用来输出this值,验证this值与...在《C++函数编译原理和成员函数实现》讲到,成员函数最终被编译成与对象无关普通函数,除了成员变量,会丢失所有信息,所以在编译时要在成员函数添加一个额外参数,把当前对象首地址传入,以此来关联成员函数和成员变量

    75550

    C++指针用法汇集

    1、指向对象指针   定义:对象空间起始地址就是对象指针。   ...说明:在建立对象时,编译系统就为每个对象分配一定存储空间以存放其成员,不过注意,在一般情况下不同对象数据存储单元存放数据成员是不相同,而不同对象函数代码却是相同,也就是说,它们函数代码是共享...这时我们可以定义一个指针变量用来存放对象指针。   ...定义指向类对象指针变量一般形式是:   类名 *对象指针名;   如对于与个Time类对象,我们可以有: Time t; Time *p; p=&t;   我们就可以通过对象指针访问对象和对象成员...指向对象成员函数gettime(),相当于t.gettime()   也可以如下形式: p->hour 和 p->gettime()和上面是等价

    13310

    C++模式

    模式有许多种实现方法,在C++,甚至可以直接一个全局变量做到这一点,但这样代码显很不优雅。...唯一实例类Singleton在静态成员函数隐藏创建实例操作。习惯上把这个成员函数叫做Instance(),它返回值是唯一实例指针。...可以在程序结束时调用GetInstance(),并对返回指针delete操作。这样做可以实现功能,但不仅很丑陋,而且容易出错。...事实上,系统也会析构所有的类静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单定义一个这样静态成员变量,而它唯一工作就是在析构函数删除单实例。...最后没有办法,我们要禁止类拷贝和类赋值,禁止程序员这种方式来使用单,当时领导意思是GetInstance()函数返回一个指针而不是返回一个引用,函数代码改为如下: [cpp] view plaincopy

    2.2K10

    C++this指针使用方法.

    this指针仅仅能在一个类成员函数调用,它表示当前对象地址。...#3:this指针怎样传递给类函数?绑定?还是在函数參数首參数就是this指针.那么this指针又是怎样找到类实例后函数? this是通过函数參数首參数来传递。...#4:this指针怎样訪问类变量/? 假设不是类,而是结构的话,那么,怎样通过结构指针来訪问结构变量呢?假设你明确这一点的话,那就非常好理解这个问题了。...在C++,类和结构是仅仅有一个差别的:类成员默认是private,而结构是public。 this是类指针,假设换成结构,那this就是结构指针了。...普通类函数(不论是成员函数,还是静态函数),都不会创建一个函数表来保存函数指针。仅仅有虚函数才会被放到函数表

    1.2K20

    C++this指针理解和用法

    对于一个类实例来说, 你可以看到它成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身。...因为this作用域是在类内部,自己声明一个类时候,还不知道实例化对象名字,所以this来使用对象变量自身。...在非静态成员函数,编译器在编译时候加上this作为隐含形参,通过this来访问各个成员(即使你没有写上this指针)。...例如a.fun(1)fun(&a,1) this使用:1)在类非静态成员函数返回对象本身时候,直接return *this(常用于操作符重载和赋值、拷贝等函数)。...,即将point1对象地址传递给了this指针 b.编译器编译后原型应该是void MovePoint(Point *this, int a, int b) c.在函数体可以写成{this->x

    67130

    C++变量与指针 | string复制

    C++什么是指针C++代码中一般是通过变量名来对内存单元进行存取操作,程序经过编译以后已经将变量名转换为变量地址,对变量值存取都是通过地址进行。...在C++,还可以采用另一种称为间接存取方式,可以在程序定义这样一种特殊变量,专门用来存放地址,由于通过地址能找到所需变量单元,因此可以说,地址指向该变量单元。...因此将地址形象化地称为指针,一个变量地址称为该变量指针;如果有一个变量是专门用来存放另一变量地址,则它称为指针变量;指针变量值是地址。...C++指针变量 指针变量是一种特殊变量,用它来指向另一个变量。为了表示指针变量和它所指向变量之间联系,在C++中用: * 表示指向。 经典案例:C++实现用string复制。...C++变量与指针 | string复制 更多案例可以go公众号:C语言入门到精通

    4952220

    详解c++指针指针指针引用

    展示一下使用指针指针指针引用修改传递给方法指针,以便更好使用它。...(这里说指针指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针复本传递给了方法,也可以说传递指针指针值传递。...如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改指针copy而不是指针本身,原来指针还保留着原来 值。...我们下边代码说明一下问题: int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv...我们看一下 func(int **p)这个方法 p:  是一个指针指针,在这里我们不会去对它做修改,否则会丢失这个指针指向指针地址 *p:  是被指向指针,是一个地址。

    1.3K60

    C++this指针

    大家好,又见面了,我是你们朋友全栈君。 C++this指针 当你进入一个房子后, 你可以看见桌子、椅子、地板等, 但是房子你是看不到全貌了。...C++在初始化对象时,每个对象数据成员都会得到系统分配自己独立存储空间。...那么问题来了,当一个对象调用自己成员函数时,如何保证成员函数对数据成员处理是自己数据成员而不是其他对象数据成员呢? 那么我们就会使用this指针。...5、只有在类非静态成员函数才可以使用this指针, 其它任何函数都不可以。 6、this指针时刻指向对象 。 7、当this指针指向空时,是不会指向对象。...this作用域是在类内部,自己声明一个类时候,还不知道实例化对象名字,所以this来使用对象变量自身。

    58020

    C++ extern 数组和指针

    在一次使用 extern 声明全局变量过程,因为数组和指针混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含)文件全局变量。...`char a[]`  `a` 是常量,是一个地址,`char *a`  `a` 是一个变量,一个可以存放地址变量。...编译完成之后也得到一个中间文件,链接器遍历这个文件,发现有未经定位标号,于是它搜索其他中间文件,试图寻找到一个匹配空间地址,在此无疑链接器将成功地寻找到这个地址并将此中间文件中所有的这个标号替换为链接器所寻找到地址...这里问题就出现了:由于在这个文件声明 a 是一个指针变量而不是数组,链接器行为实际上是把指针 a 自身地址定位到了另一个 .c 文件定义数组首地址之上,而不是我们所希望把数组首地址赋予指针...所以此指针 a 内容实际上变成了数组 a 首地址开始 4 字节表示地址(如果在 16 位机上,就是 2 字节)。

    43100

    详解 C++ 11 智能指针

    假设现在有一个 Socket 类,对应着操作系统套接字句柄,在回收时需要关闭该对象,我们可以如下自定义智能指针对象资源析构函数,这里以 std::unique_ptr 为: #include <iostream...std::weak_ptr 应用场景,经典例子是订阅者模式或者观察者模式。这里以订阅者为来说明,消息发布器只有在某个订阅者存在情况下才会向其发布消息,而不能管理订阅者生命周期。...C++ 新标准各种智能指针是如此实用与强大,在现代 C++ 项目开发,读者应该尽量去使用它们。...); ~Test(); private: std::unique_ptr m_spA; }; C++ 新标准智能指针我想介绍就这么多了,Modern C/C++ 已经变为 C.../C++ 开发趋势,希望读者能善用和熟练使用本节介绍后三种智能指针对象。

    2.8K31

    5 个JavaScript Slice()

    因此,索引最后一个元素不包含在数组副本。例如, slice(1,3) 提取第二个和第三个元素。...1、复制一个数组 第一个功能是 slice() 函数基本功能。没有参数数组复制原始数组。有时,您可能想要更新数组某些元素。 但是,您可能希望保护原始数组元素。...const midtermGrades = updatedGrades.slice(); 2、构造一个以n开头子数组 slice() 方法第二个是复制以 n 开头子数组。...value + this.slice(index); }; var s = "Happy year"; alert(s.append(6,"new ")); 结论 学习 JavaScript 内置函数可以帮助您提高编码技能...总结一下,本文中 slice() 例如下: 复制数组 构造一个从 n 开始子数组 将类数组对象转换为数组 将 NodeList 转换为数组 替换字符串特定索引

    64920

    CKB Sparse Merkle Tree

    Merkle Tree proofs 可以快速方便地计算出来 Merkle Tree proofs 数据量较小,可以方便地在全网广播 1.4 比特币 Merkle Tree 叶节点存储交易哈希...如下图所示,需要构建节点 A、B、C、D (红色边框) multiproof。节点 B、C 存在于树,而节点 A、D 不存在于树。multiproof 包含了图中用红色填充块。...SMT CKB 是一个采用 PoW 共识算法区块链。...: 验证 kv_state 是对,即 Alice 目前确实是有那么多钱:根据 Witnesses kv_state 和 kv_proof 计算出 root,与 Inputs Compact...和已有的 kv_proof 计算出 root,与 Ouputs Compact UDT Cell new SMT root hash 比较,如果一致,则说明 new SMT root hash

    40320

    C++this指针作用以及用法详解

    当我们在类定义了一个变量,同时又在类成员函数定义了同一个变量时,也就是变量名重复时,但是我们要想使用类定义变量,此时就需要this指针了。...1.this指针作用 指针存在于类成员函数,指向被调用函数类实例地址。 一个对象this指针并不是对象本身一部分,不会影响sizeof()结果。...this指针作用域是在类内部,当在类非静态成员函数访问类非静态成员时候,编译器会自动将对象本身地址作为一个隐含参数传递给函数。...2.this指针使用 (1)在类非静态成员函数返回类对象本身时候,直接使用 return *this; (2)当参数与函数成员变量名相同时,应使用 this.age = age; 3.this指针特点...(1)this指针只能在成员函数中使用 全局函数,静态函数都不能使用this指针,其实,成员函数第一个默认参数是 *const this :class Student()

    42430
    领券