【无标题】this指针

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。

友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针。

下面的实例有助于更好地理解 this 指针的概念:

实例

#include <iostream> using namespace std; class Box { public: // 构造函数定义 Box(double l=2.0, double b=2.0, double h=2.0) { cout <<"Constructor called." << endl; length = l; breadth = b; height = h; } double Volume() { return length * breadth * height; } int compare(Box box) { return this->Volume() > box.Volume(); } private: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box }; int main(void) { Box Box1(3.3, 1.2, 1.5); // Declare box1 Box Box2(8.5, 6.0, 2.0); // Declare box2 if(Box1.compare(Box2)) { cout << "Box2 is smaller than Box1" <<endl; } else { cout << "Box2 is equal to or larger than Box1" <<endl; } return 0; }

当上面的代码被编译和执行时,它会产生下列结果:

Constructor called.
Constructor called.
Box2 is equal to or larger than Box1

正在上传…重新上传取消 C++ 类 & 对象

 C++ 数据结构

C++ 继承

2 篇笔记 写笔记

  1.    isee_nh

      140***4009@qq.com

    254

    C++ Primer Page 258

    引入 this:

    当我们调用成员函数时,实际上是替某个对象调用它。

    成员函数通过一个名为 this 的额外隐式参数来访问调用它的那个对象,当我们调用一个成员函数时,用请求该函数的对象地址初始化 this。例如,如果调用 total.isbn()则编译器负责把 total 的地址传递给 isbn 的隐式形参 this,可以等价地认为编译器将该调用重写成了以下形式:

    //伪代码,用于说明调用成员函数的实际执行过程
    Sales_data::isbn(&total)

    其中,调用 Sales_data 的 isbn 成员时传入了 total 的地址。

    在成员函数内部,我们可以直接使用调用该函数的对象的成员,而无须通过成员访问运算符来做到这一点,因为 this 所指的正是这个对象。任何对类成员的直接访问都被看作是对 this 的隐式引用,也就是说,当 isbn 使用 bookNo 时,它隐式地使用 this 指向的成员,就像我们书写了 this->bookNo 一样。

    对于我们来说,this 形参是隐式定义的。实际上,任何自定义名为 this 的参数或变量的行为都是非法的。我们可以在成员函数体内部使用 this,因此尽管没有必要,我们还是能把 isbn 定义成如下形式:

    std::string isbn() const { return this->bookNo; }

    因为 this 的目的总是指向“这个”对象,所以 this 是一个常量指针(参见2.4.2节,第56页),我们不允许改变 this 中保存的地址。

    isee_nh

       isee_nh

      140***4009@qq.com

    4年前 (2018-05-01)
  2.    TO_oTR

      to_***@163.com

    107

    #include <iostream>
    using namespace std;class Box{public:Box(){;}~Box(){;}Box* get_address()   //得到this的地址{return this;}
    };int main(){Box box1;Box box2;// Box* 定义指针p接受对象box的get_address()成员函数的返回值,并打印Box* p = box1.get_address();  cout << p << endl;p = box2.get_address();cout << p << endl; return 0;
    }

    this 指针的类型可理解为 Box*

    此时得到两个地址分别为 box1 和 box2 对象的地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/487076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文读懂马斯克展示脑机接口:硬币大小芯片植入猪脑 实时读取猪脑信息

视频&#xff1a;马斯克展示脑机接口设备无线实时读取猪脑信息&#xff0c;时长约7分10秒来源&#xff1a;腾讯科技马斯克展示了一群实验猪。这些实验猪之前曾接受过外科手术&#xff0c;由手术机器人将最新版的Neuralink设备植入大脑。这些项目的目标都是利用大脑植入技术实现…

循环,函数,指针作业

一、循环 题目1&#xff1a;7-6 统计素数并求和 提交列表&#xff1a; 流程图&#xff1a; 问题&#xff1a; 解决&#xff1a;mn最多一个素数&#xff0c;都为0无答案&#xff1b;m和n本身也可能是素数。 题目2&#xff1a;7-12 约分最简分式 提交列表&#xff1a; 流程图&…

字符数组的应用

一维数组 char s[10]; s可以存储的字符串的最大长度&#xff08;字符串中字符的个数&#xff09;为9个字符&#xff0c;在最后一个字符后面存储一个字符\0&#xff08;ASCII码为0的字符&#xff09;作为字符串的结束标志 char s2[10]{"student"}; char s3[10]&quo…

华为徐文伟:后香农时代,面向数学的十大挑战问题

本文为2020年8月28日徐文伟在长沙由中国工业与应用数学学会举办的“数学促进企业创新发展论坛”上的发言来源&#xff1a;中国科学院院刊徐文伟华为技术有限公司董事&#xff0c;华为战略研究院院长后香农时代数学决定未来发展的边界数学作为基础的基础&#xff0c;将决定未来发…

06006_redis数据存储类型——String

1、概述 &#xff08;1&#xff09;字符串类型是Redis中最为基础的数据存储类型&#xff0c;它在Redis中是二进制安全的&#xff0c;这意味着该类型可以接受任何格式的数据&#xff0c;如JPEG图像数据或Json对象描述信息等&#xff1b; &#xff08;2&#xff09;在Redis中字符…

C/C++预处理指令

本文主要记录了C/C预处理指令&#xff0c;常见的预处理指令如下&#xff1a; #空指令&#xff0c;无任何效果#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真&#xff0c;则编译下面代码#ifdef如果宏已经定义&#xff0c;则编译下面代码#ifn…

comparator 多个条件控制_JUnit5学习之四:按条件执行

欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容&#xff1a;所有原创文章分类和汇总&#xff0c;及配套源码&#xff0c;涉及Java、Docker、Kubernetes、DevOPS等&#xff1b;本篇概览本文是《JUnit5学习》系列的第四篇&#xff0c;有时咱们希望测试方法仅在一定…

“星链”或成美军未来作战理念新载体

本文来源&#xff1a;中国军网在美国航天政策愈发重视商业航天发展&#xff0c;尤其是美太空军发展对巨型弹性低轨星座提出重大需求的背景下&#xff0c;美国太空探索公司SpaceX乘势将业务从商业航天发射、载人航天货物和乘员运输逐渐扩展至低轨宽带通信服务&#xff0c;即“星…

基基于多态的职工管理系统

效果 添加 显示 删除 查找 排序&#xff08;不演示了&#xff09; 清空所有 头文件 员工类 #pragma once #include <iostream> #include <string> using namespace std;//职工抽象基类 class Worker { public://显示个人信息virtual void showInfo() 0;//获取…

typescript箭头函数参数_Typescript 入门基础篇(一)

Typescript 基础Typescript是Javascript的一个超集。以下typescript简称为ts, 此文章主要是对ts官网文档的一个简化&#xff0c;缩短学习基础时间。类型基础ts 的类型主要有布尔值、数字、字符串、数组、元组、枚举、Any、Void、Null和Undefined、Never。# Boolean let boo : b…

sublime学习笔记

学习课程地址&#xff1a;快乐的sublime编辑器_sublime编辑器使用 另可参考笔记地址&#xff1a; http://c.haoduoshipin.com/happysublime/ http://blog.csdn.net/u014465934/article/details/72810763 PS&#xff1a;博主的一些文章地址&#xff1a;http://happypeter.github…

里程碑式的数学证明,攻破著名Erdős猜想中关键障碍

大数据文摘出品来源&#xff1a;wired编译&#xff1a;Canary、Andy最近&#xff0c;两名数学家解决了一个关于整数相加性质最著名猜想中的第一部分。该猜想由匈牙利传奇数学家Paul Erdős于60多年前提出&#xff0c;一个无限整数序列在何时一定会包含至少有三个等差数的模式&a…

浅复制和深复制

浅复制是由默认构造函数实现的&#xff0c;将对应数据成员一一复制。 浅复制 template<class T> Array<T>::Array(const Array<T>&a) {sizea.size;a.list list; }如果主函数中有这样的语句&#xff1a; int main() {Array<int> a(10);Array<…

admin select 2 异步_解决Angularjs异步操作后台请求用$q.all排列先后顺序问题

最近我在做angularjs程序时遇到了一个问题1.页面有很多选择框&#xff0c;一个选择框里面有众多的选择项&#xff0c;和一个默认选定的项,像下面这样(很多选择框&#xff0c;不只一个)&#xff1a;2.众多的选项要从后台接口得到&#xff0c;默认项从另一个后台接口得到&#xf…

产业|世界十大工业自动化公司,你知道几家?

来源&#xff1a;机械前线国内工业自动化行业的竞争激烈&#xff0c;国外工业自动化设备、产品制造商依然控制国内上游产品供应的主要市场&#xff0c;下面来看看国外最赚钱的工业自动化公司有哪些。▶1、德国西门子西门子股份公司(SIEMENSAGFWB:SIE&#xff0c;NYSE:SI)是全球…

12月25晚-12月29日做的两个网页

1 <!doctype html>2 <html>3 <head>4 <meta charset"utf-8">5 <title>仿山东理工大学</title>6 <link rel"stylesheet" href"css/wangye.css">7 <link href"img/favicon.ico" r…

函数模板的注意事项

&#xff08;1&#xff09;函数模板本身在编译时不会是生成任何目标代码&#xff0c;只有在由模板生成的实例会生成目标代码 &#xff08;2&#xff09;被多个源文件引用的函数模板&#xff0c;应当连同函数体一同放在头文件中&#xff0c;而不能像普通函数那样只将声明放在头…

2运行内存多大_智能设备中的内存与容量为何傻傻分不清?它们的区别是什么?...

在日常生活中&#xff0c;很多时候会把某些电子产品的容量说成内存&#xff0c;或者把内存说成了容量。比如有人问&#xff1a;“这个手机的内存多大&#xff1f;”或许会有这样回答的&#xff1a;“内存是256G。”这种问答方式虽然看似很普通&#xff0c;如果让业内人士以及了…

Nature突破:首个比头发丝还细的机器人诞生了!可用针头注射入人体

来源&#xff1a;科研大匠1959年&#xff0c;诺贝尔奖得主、理论物理学家Richard Feynman 首次提出微型医用机器人的概念。此后&#xff0c;将电子器件微型化以生产细胞大小的机器人一直是科学家们追求的目标&#xff0c;但由于缺乏合适的微米级致动器系统&#xff0c;该技术一…

腾讯云云机安装dockers

云机的配置 首先更新一下源&#xff08;更新前一直装不了&#xff09;下载dockers-ce&#xff08;社区版&#xff09;启动dockers服务使用hello-world进行测试&#xff08;由于本地没有hello-world这个镜像&#xff0c;所以dockers会下载下来并且在容器里运行&#xff09;转载于…