this指针

C ++有一个名为 "this" 的指针。"this" 返回自己的地址。

在某些情况下,"this" 可能是必要的,但经常使用它被认为是一种风格偏好。

请注意下面的程序,比较 Shape 自身区域的面积 和 shape 的面积:

 //Use 'this' to compare areas//The class functionsint compareWithThis(Shape shape) {//return the area of the calling shapereturn this->Area() > shape.Area(); }
//Using the class function in a program//In this case sh1.Area() is being compared to sh2.Area()if(sh1.compareWithThis(sh2)) {cout << "\nShape2 is smaller than Shape1" <<endl;} 

我可以执行完全相同的函数 而 不使用 " this " 。

//'this' is not necessary to compare shapesint compare(Shape shapeIn) {return Area() > shapeIn.Area();}

要使用类函数:

 if(sh1.compare(sh2)) {cout << "\nShape2 is smaller than Shape1" <<endl;} 

举例,同样,该函数将sh1.area() 与 sh2.area()的进行比较。

#include <iostream>using namespace std;class Shape {public:// Constructor definitionShape(int l = 2, int w = 2) {length = l;width = w;}double Area() {return length * width;}//Use 'this' to compare areasint compareWithThis(Shape shape) {return this->Area() > shape.Area();}//'this' is not necessary to compare shapesint compare(Shape shapeIn) {return Area() > shapeIn.Area();}private:int length;     // Length of a boxint width;
};int main(void)
{Shape sh1(4, 4);    // Declare shape1Shape sh2(2, 6);    // Declare shape2if(sh1.compare(sh2)) {cout << "\nShape2 is smaller than Shape1" <<endl;} else {cout << "\nShape2 is equal to or larger than Shape1" <<endl;}if(sh1.compareWithThis(sh2)) {cout << "\nShape2 is smaller than Shape1" <<endl;} else {cout << "Shape2 is equal to or larger than Shape1" <<endl;}return 0;
}

运行结果:

代码解析:

1。以下代码中,this->Area() 是什么意思呢?

      //Use 'this' to compare areasint compareWithThis(Shape shape) {return this->Area() > shape.Area();}

我们先来看 " -> " 和 " . " 的区别:

" -> " 是指针类型,是指针引用;

" . "   是实例化对象,类中普通成员的引用;

我们举个小例子:

class student
{public:       string name[20];
};

第一种情况,采用指针访问 student *xy,则访问时,需要写成 *xy.name="hhhhh"; 等价于 xy->name="hhhhh";

第二种情况,采用普通成员访问 student xy,则访问时,需要写成 xy.name="hhhhh";

所以,this 代表 *Shape,整个式子来看,this.Shape->Are() 代表 :*Shape.Are() 。

这里 this.Shape->Are()  的值就是:2 * 2 = 4;

解析完毕。


编程就是算法和数据结构,算法和数据结构是编程的灵魂。

C ++ 指针 | this指针_2相关推荐

  1. C ++ 指针 | 指针的操作_2

    指针的操作 1.p+1 指针变量p,获取a变量的地址后,再加上1,结果会是什么? 直接上码: #include<iostream>int main() {int a = 10;int *p ...

  2. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针

    1. 什么是指针变量? 指针变量是专门有一个变量来存放指针. int main(int argc, char *argv[]) {int a = 10;int *p = &a; //通过取地址 ...

  3. 关于C语言中的数组指针、指针数组以及二级指针

    概念解释 数组指针:首先它是一个指针,它指向一个数组,即指向数组的指针:在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道.数组指针指向的是数组中的一个具体元素,而不是整个数组,所 ...

  4. C++ 笔记(14)— 指针(指针声明、取地址、取值、new/delete、NULL指针、指针运算、指针数组、数组指针、指针传递给函数、从函数返回指针)

    1. 声明指针 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指 针存储其他变量地址之前,对其进行声明. 指针变量声明的一般形式为: type * ...

  5. Go 学习笔记(13)— 指针定义、指针特点、空指针、指针数组、指向指针的指针、指针作为函数入参

    1. 复合数据类型 Go 语言基本的复合数据类型有指针.数组.切片.字典.通道.结构和接口等.格式如下: * pointerType // 指针类型, [n]elementType // 数组类型, ...

  6. inline函数返回值_C++知识补充-指针,const,函数指针,指针数组,运算符重载

    嵌入式Linux:C++ 面试准备珍藏版本​zhuanlan.zhihu.com 明月照我心:123道c++笔试题汇总(含答案)​zhuanlan.zhihu.com 阿贵:常见C++笔试面试题整理​ ...

  7. C指针8:二级指针(意思就是指向指针的指针)

    指针可以指向一份普通类型的数据,例如 int.double.char 等,以下简称一级指针: 也可以指向一份指针类型的数据,例如 int *.double *.char * 等.以下简称二级指针:即如 ...

  8. C/C++指向指针的指针

    我在一篇教程中看到下面这段,它描述指向指针的指针是如何运作的. 引用文章相关段落如下: int i = 5, j = 6, k = 7; int *ip1 = &i, *ip2 = & ...

  9. 常引用、常量指针、指针常量、指向常量的常指针、空指针与野指针解释

    1.一.基础知识 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是 ...

  10. 深入理解指针以及二级指针(指针的指针)

    前言:本文将讲解指针的定义.指针变量和普通变量的本质区别.一级指针和二级指针的关系以及如何通过二级指针修改一级指针所指向的内存.文末还附加了两个实例,帮助读者加深对二级指针的理解.本文试图通过图表的方 ...

最新文章

  1. 桌面版应用_桌面版应用程序的前世今生
  2. 牛客网 牛客练习赛13 C.幸运数字Ⅲ-思维
  3. 前向业务中间层的意义,架构,技能要求
  4. 有用的Chrome扩展介绍 - Octotree - GitHub code tree
  5. java在原数组中追加一个元素
  6. 单片机单口不可用或被占用_新唐单片机代码评审总结
  7. java环境变量配置方法
  8. Form Follows Function – 绚丽的 HTML5 互动体验网站
  9. Debian for ARM install python 3.5.x
  10. DSP实验报告—实验 4  编写一个汇编和 C 混合的 DSP 程序
  11. linux下的几种文本去重方法
  12. 基于GIS+BIM技术的高速公路征地拆迁管理系统应用
  13. Java对接企业微信消息推送
  14. 实验室设备管理系统(C语言实现)
  15. 基于移动终端的大学生心理健康交互管理系统的研究与设计
  16. FS4064 SOP8 两节8.4V线性锂电池充电IC
  17. 使用 strace、tcpdump、nlmon、wireshark 探索 ethtool netlink 框架的原理
  18. 登录功能图片验证码的实现
  19. SwiftUI基础——创建并组合视图
  20. C#工控上位机开发-->1、C#快速编程入门

热门文章

  1. linux shell的组成,理解Linux中子shell的概念
  2. android studio moudel,Android Studio将module变为library
  3. Kotlin学习笔记22 协程part2 join CoroutineScope 协程vs线程
  4. Android TextView setGravity不起作用
  5. 关于tensorflow2.0的弊端
  6. simulink接收串口数据_JLink RTT连接Simulink
  7. rz/sz命令参数解释
  8. php自学建议_如何高效自学PHP?
  9. 电脑字体在哪个文件夹_【安卓】造字(下):如何将生成的字体设置为手机系统显示字体...
  10. php中sha1,PHP中sha1()函数和md5()函数的绕过