首页 > 其他分享 >this指针的使用

this指针的使用

时间:2024-03-07 16:37:52浏览次数:19  
标签:p1 函数 int age Person 使用 指针

c++提供特殊的对象指针,也就是this指针,this指针指向被调用的成员函数所属的对象

this指针是隐含每一个非静态成员函数内的一种指针

this函数不需要定义,直接使用即可

 

this指针的用途:

  • 当形参和成员变量同名时,可用this指针来区分
  • 在类的非静态成员函数中返回对象本身,可使用return *this

 

实例代码1:

#include <iostream>

using namespace std;

class Person {
public:
    Person(int age) {
        //this指针指向被调用的成员函数所属的对象
        this->age = age;
    }

    int age;

    void PersonAddAge(Person &p) {
        this->age += p.age;
    }

};

void test01() {
    Person p1(10);
    //结果:p1的年龄为:10
    cout << "p1的年龄为:" << p1.age << endl;
}

void test02() {
    Person p1(10);
    Person p2(10);
    p2.PersonAddAge(p1);
    //结果:p2的年龄为:20
    cout << "p2的年龄为:" << p2.age << endl;
}

int main() {
    test01();
    test02();
}

 

当返回值为*this时,函数返回当前对象的引用:

实例代码2:

#include <iostream>

using namespace std;

class Person {
public:
    Person(int age) {
        //this指针指向被调用的成员函数所属的对象
        this->age = age;
    }

    int age;

    //函数返回当前对象的引用
    Person &PersonAddAge(Person &p) {
        this->age += p.age;
        return *this;
    }

};

void test01() {
    Person p1(11);
    //结果:p1的年龄为:11
    cout << "p1的年龄为:" << p1.age << endl;
}

void test02() {
    Person p1(11);
    Person p2(11);
    //链式编程思想
    p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);
    //结果:p2的年龄为:55
    cout << "p2的年龄为:" << p2.age << endl;
}

int main() {
    test01();
    test02();
}

 

当函数返回的不是引用而是值:

实例代码3:

#include <iostream>

using namespace std;

class Person {
public:
    Person(int age) {
        //this指针指向被调用的成员函数所属的对象
        this->age = age;
    }

    int age;

    //函数的返回类型为类的类型,而返回当前对象的引用
    Person PersonAddAge(Person &p) {
        this->age += p.age;
        return *this;
    }

};

void test01() {
    Person p1(11);
    //结果:p1的年龄为:11
    cout << "p1的年龄为:" << p1.age << endl;
}

void test02() {
    Person p1(11);
    Person p2(11);
    //链式编程思想
    p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);
    //结果:p2的年龄为:22
    cout << "p2的年龄为:" << p2.age << endl;
}

int main() {
    test01();
    test02();
}

图示:

原理:

如果是以值的方式返回,每次都会创建一个新的对象,即每次都会创建一个p2的拷贝,但修改后的数据不会呈现在p2上

 

标签:p1,函数,int,age,Person,使用,指针
From: https://www.cnblogs.com/eisenshu/p/18059054

相关文章

  • 实体类与数据库的直接交互问题,DTO,AutoMapper的使用
    实体类、DTO与数据库交互的最佳实践实体类与数据库的直接交互问题在软件开发中,实体类通常被设计为反映业务域的数据模型。这些实体类可能包含以下元素:特性(Attributes):用于定义实体属性的额外信息,比如数据验证规则或ORM(对象关系映射)框架的映射信息。继承关系:实体之间可能存......
  • css样式属性 使用汇总,补齐前端短板
    ---------------index.css常用网站css样式属性使用汇总1-------------/*先删除默认的内外边距*/*{margin:0;padding:0;}body{background-color:#fafafa;height:2000px;}li{list-style:none;/*取消li的符号*/}/*顶部导航栏开......
  • git merge请使用 `--no-ff`
    三种模式fast-forward--squash--no-fffast-forwardGit合并两个分支时,如果顺着feature分支走下去可以到达main分支的话(main分支在feature分支开发期间没有新的提交),那么Git在合并两者时,只会简单地把指针右移,叫做“快进”(fast-forward)。一旦删除分支或者分支指针往前走,很......
  • 记录一次使用ddrescue从有坏道的磁盘恢复数据
    《记录一次使用ddrescue从有坏道的磁盘恢复数据》ddrescue是Linux和类Unix系统中的一个命令行工具,用于数据恢复。与传统的dd命令不同,ddrescue设计用于从有问题的存储设备(如硬盘、闪存等)中恢复数据,即使存在坏块或读取错误也能继续复制数据。它使用日志文件来记录哪些数据块已成功......
  • AutoUpdater.NET自动更新库使用
    原文链接:https://blog.csdn.net/g313105910/article/details/112313695.NET程序当部署很多的时候,每次手动下载升级麻烦,原来自己写了个自动升级的程序,独立运行,需要主程序来更新自动升级程序,自动升级程序升级主程序,功能运行正常,最近发现有AutoUpdater.NET库很方便,在此写下使用方法,......
  • Sonarqube 使用授权Gitlab账号登录 Sonarqube 手记
      Sonarqube使用授权Gitlab账号登录Sonarqube手记1、安装部署sonarqbue  参考:https://www.cnblogs.com/nb-blog/p/17988874 2、安装部署gitlab参考:https://www.cnblogs.com/nb-blog/p/17965971 我是通过k8s部署argocd 使用argocd进行的sonar......
  • 使用ilasm 和 ildasm编译和反编译工具对DLL文件修改
    目录前言一、使用ildasm反编译dll文件二、使用ilasm将il文件编译成dll或exe文件前言文本讲述怎么通过ildasm工具将dll文件进行反编译为il文件,修改il文件后再如何通过ilasm工具将il文件反编译成dll或exe文件。ildasm工具:用于将dll文件反编译成可读......
  • [转]mkcert 使用指南:如何快速创建自签名 SSL 证书
    原文地址:mkcert使用指南:如何快速创建自签名SSL证书-知乎我们平时在本地开发时,有时会要求通过HTTPS请求来访问。一个通用的做法是用OpenSSL生成自签证书,然后对Web服务进行配置。但OpenSSL的命令比较繁琐,参数也比较复杂,用起来不够方便。于是我找到了一个替代方案:mkce......
  • 使用BPF之前和之后生成直方图过程的对比
    以bitehist为例:使用BPF之前:1、在内核中:开启磁盘IO事件的插桩观测。2、在内核中,针对每个事件:向perf缓冲区写入一条记录。如果使用了跟踪点技术(推荐方式),记录中会包含关于磁盘IO的几个元数据字段。3、在用户空间:周期性地将所有事件的缓冲区内容复制到用户空间4。在用户空间:......
  • 使用jenkins连接linux部署jar包
    jenkins安装首先安装jenkins,我们可以使用docker安装。用下面命令拉取jenkins镜像。dockerpulljenkins/jenkins然后正常安装jenkins容器即可。安装完成后,进入jenkins管理界面。会让我们输入初始化密码,和创建默认用户。我们按照提示操作即可。然后,用默认用户登录,进入界面如......