浅析C/C++ 中return *this和return this的区别

浅析C/C++ 中 return *this 和 return this 的区别

在 C/C++ 中,this 指针指向当前对象,*this 则代表对象本身。在函数中,return *thisreturn this 实现的功能大致相同,但是两者仍有一定的区别。

return *this

return *this 关键字语句出现时,函数返回的是对象本身,以供当前对象进行链式调用(chaining)操作,常用于实现方法的链式调用接口。下面是实例代码:

#include <iostream>

class Person {
public:
    Person& setAge(int age) {
        this->age = age;
        return *this;
    }

    Person& setName(std::string name) {
        this->name = name;
        return *this;
    }

    void display() {
        std::cout << "Name: " << name << ", Age: " << age << std::endl;
    }

private:
    std::string name;
    int age;
};

int main() {
    Person p;
    p.setName("Alice").setAge(25).display();
    return 0;
}

这里的 setNamesetAge 都是返回 *this 指针,即对象本身。

return this

return *this 不同的是,return this 返回的是一个指向当前对象的指针。这种返回类型通常用于一些特殊的场合,例如实现成员函数的递归调用。

在这种情况下,需要用到指向当前对象的指针。

下面是一个简单的示例,实现了一个 getNum 函数,该函数返回当前对象的编号。

#include <iostream>

class MyClass {
public:
    MyClass(int id): id_(id) {}

    int getNum() {
        return this->id_;
    }

private:
    int id_;
};

int main() {
    MyClass obj(100);
    std::cout << "MyClass object's id is: " << obj.getNum() << std::endl;
    return 0;
}

这里的 getNum 函数返回的是指向当前对象的指针,即 this->id_

总结

总之,return *thisreturn this 关键字语句的功能有所不同。在链式调用中,常用的是 return *this,返回对象本身的指针,在某些场合,需要返回指向当前对象的指针,应使用 return this 语句。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析C/C++ 中return *this和return this的区别 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 使用MinGW使Windows通过gcc实现C或C++程序本地编译执行的方法

    使用MinGW使Windows通过gcc实现C或C++程序本地编译执行的方法包括以下步骤: 安装MinGW 确认Windows系统位数(32位或64位) 下载MinGW安装程序并安装:https://osdn.net/projects/mingw/releases/ 安装时务必勾选“mingw32-base”、“mingw32-gcc-g++”这两个选项 配…

    C 2023年5月23日
    00
  • Java Lambda表达式超详细介绍

    Java Lambda表达式超详细介绍 什么是Lambda表达式 Lambda表达式是Java 8中引入的新特性,它是一种简洁的语法格式,用于创建函数式接口实例的方法。通过Lambda表达式,可以把函数式接口作为函数参数传递或将其作为返回值返回。 Lambda表达式的语法格式 Lambda表达式的语法格式如下: (parameters) -> expr…

    C 2023年5月22日
    00
  • Kotlin基础学习之循环和异常

    Kotlin基础学习之循环和异常 在Kotlin编程中,循环和异常是非常重要的基础知识点。在本篇文章中,我们将详细学习Kotlin中的循环和异常的语法和用法。 一、循环 1. for循环 for循环在Kotlin中非常常用,使用起来也非常简单。下面是for循环遍历数组的一个示例: val numbers = listOf(1, 2, 3, 4, 5) for…

    C 2023年5月23日
    00
  • C++用mysql自带的头文件连接数据库

    接下来我会为你详细讲解 “C++用mysql自带的头文件连接数据库”的完整攻略,包括安装MySQL和配置环境,以及如何使用MySQL头文件进行编程。 安装MySQL和配置环境 首先,你需要在你的计算机上安装MySQL。你可以在MySQL的官方网站 https://dev.mysql.com/downloads/ 下载MySQL的安装程序并按照提示进行安装。 …

    C 2023年5月22日
    00
  • 到底如何呢?富士康Ligtning&USB-C数据线测评

    制定测试方案 在进行富士康Ligtning&USB-C数据线的测评之前,需要制定测试方案。主要需要测试以下几点: 兼容性 传输速度 做工质量 安全性能 兼容性测试 取一个iOS设备,如iPhone,连接富士康Ligtning&USB-C数据线,测试手机是否能够正常充电和传输数据。同样的,取一个安卓设备连接USB-C接口进行测试,检查是否能正常…

    C 2023年5月23日
    00
  • 深入理解c/c++ 内存对齐

    深入理解C/C++内存对齐攻略 什么是内存对齐 内存对齐是为了效率而生。现代 CPU 的内存存储是以字节为单位的,每个变量被加载到内存时,它们都会被分配一个地址。但是,CPU 在处理内存的时候,通常会以块为单位的方式处理:如果我们尝试将不同类型的变量加载到同一个块中,则需要考虑块的大小,以哪种顺序分配变量的内存空间等。因此,内存对齐是指将每个变量(或结构体的…

    C 2023年5月22日
    00
  • C/C++ Qt 数据库与TableView实现多组件联动

    下面我将为你详细讲解如何使用 C/C++ Qt 实现数据库和 TableView 的联动。 准备工作 在开始之前,我们需要先准备好以下工具和环境: Qt:这是一个跨平台的 C++ 应用程序开发框架,我们将使用 Qt 来开发我们的程序。 MySQL:一个关系型数据库管理系统,我们将使用它来存储和管理我们的数据。 Qt Creator:这是一个供 Qt 开发者使…

    C 2023年5月22日
    00
  • 项目之C++如何实现数据库连接池

    下面是关于“项目之C++如何实现数据库连接池”的完整攻略。 概述 这是一个C++项目,目的是为了实现一个数据库连接池。它可以提供多个连接数据库的线程,而且每个线程都可以从连接池中获取数据库连接,使用完之后再释放回去,以便其他线程使用。 实现步骤 第一步:建立连接池类 首先,我们需要建立一个连接池类,这个类应该包含以下几个基本方法: init_connecti…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部