C++简明图解this指针的使用

目录
  • 成员数据和成员函数的存储方式
  • this指针的引入
  • this指针概述
  • this指针的使用

c++的封装性:将数据 和 方法 封装在一起

数据 和 方法 是分开存储。

每个对象 拥有独立的数据.

每个对象 共享同一个方法。

成员数据和成员函数的存储方式

1、成员函数不占类的空间

2、静态成员数据不占类的空间

this指针的引入

class Data
{
public:
    int m_num;

    void setNum(int num)
    {
        m_num = num;
    }
};
void test01()
{
    Data ob1;
    ob1.setNum(10);
    cout<<"ob1.m_num = "<<ob1.m_num<<endl;
    Data ob2;
    ob2.setNum(20);
    cout<<"ob2.m_num = "<<ob2.m_num<<endl;
    Data ob3;
    ob3.setNum(30);
    cout<<"ob3.m_num = "<<ob3.m_num<<endl;
}

运行结果:

this指针概述

1、对象调用普通成员函数 在成员函数内部会产生一个指向该对象的this指针(this指针变量 是系统定义的)

2、this指针的目的:说明当前成员函数 是属于哪个对象的

3、静态成员函数内部 没有this指针

class Data
{
public:
    int m_num;
    void setNum(int num)
    {
        //m_num = num;
        this->m_num = num;
    }
};
void test01()
{
    Data ob1;
    ob1.setNum(10);
    cout<<"ob1.m_num = "<<ob1.m_num<<endl;
    Data ob2;
    ob2.setNum(20);
    cout<<"ob2.m_num = "<<ob2.m_num<<endl;
    Data ob3;
    ob3.setNum(30);
    cout<<"ob3.m_num = "<<ob3.m_num<<endl;
}

运行结果:

注意:

1、this指针是隐含在对象成员函数内的一种指针

2、成员函数通过 this指针 即可知道操作的是那个对象的数据(定位对象)

3、静态成员函数内部没有this指针,静态成员函数不能操作非静态成员变量

(静态成员函数 是属于类 函数内部 没有this指针)

this指针的使用

1、当形参和成员变量同名时,可用this指针来区分

class Data
{
public:
    int num;
    //形参 和成员名相同
    void setNum(int num)
    {
        //形参num
        //成员num  this->num
        //num= num;//就近原则 形参num 赋值给 形参num
        this->num = num;
        //将形参num 赋值给 对象中成员num
    }
};

2、在类的普通成员函数中返回对象本身(*this)(重要)

class MyCout
{
public:
    MyCout& myCout(char *str)
    {
        cout<<str;
        return *this;//*this 代表就是 当前调用该函数的对象
    }
};
int main(int argc, char *argv[])
{
    MyCout ob;
    /*
    ob.myCout("hehe");
    ob.myCout("haha");
    ob.myCout("xixi");*/
    ob.myCout("hehe").myCout("haha").myCout("xixi");//ob.myCout("hehe") == ob
    return 0;
}

运行结果:

3、如果成员数据和函数的形参 同名 必须使用this指针

class Data
{
public:
    int a;//4B
public:
    void setA(int a)
    {
        this->a = a;
        return;
    }
    int getA(void)
    {
        return this->a;
    }
};

4、this指针完成链式操作

class Printf
{
public:
    Printf& myPrint(int value)
    {
        cout<<value<<" ";
        //*this ==外界的对象
        return *this;
    }
};
void test01()
{
    Printf ob;
    ob.myPrint(10).myPrint(20).myPrint(30).myPrint(40);
    cout<<endl;
}

到此这篇关于C++简明图解this指针的使用的文章就介绍到这了,更多相关C++ this指针内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C++深入浅出讲解隐藏this指针的用法

    目录 1.this指针的引出 2.this指针的特性 3.练习一下 本篇文章我们将一起讨论在有趣的知识点--隐藏的this指针.本篇我们要使用到之前我们所学习到的C++类与对象,如果有各位小伙伴还不曾了解类与对象的简单思想,可以访问上篇: 在之后的学习中,我们将认识一个新的类:日期类Date.正如我们所想的那样,传入一个日期,我们可以输出我们所输入的日期. 1.this指针的引出 那我们首先来看一下,这段代码会输出什么结果呢? class Date { public: void Display(

  • C++深入探究类与对象之对象模型与this指针使用方法

    目录 C++对象模型和this指针 1 成员变量和成员函数分开存储 2 this指针概念 3 空指针访问成员函数 4 const修饰成员函数 C++面向对象的三大特性为:封装.继承.多态 C++认为万事万物都皆为对象,对象上有其属性和行为 例如: ​ 人可以作为对象,属性有姓名.年龄.身高.体重…,行为有走.跑.跳.吃饭.唱歌… ​ 车也可以作为对象,属性有轮胎.方向盘.车灯…,行为有载人.放音乐.放空调… ​ 具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类 C++对象模型和th

  • C++this指针详情

    还是Stock股票这个类,假设我们要实现一个方法,比较一下当前股票和传入的股票, 返回价格高的那个股票.在我们实现的时候,会遇到一点问题. const Stock & Stock::topVal(const Stock &s) const {     if (s.total_val > total_val) {         return s;     }else {         return ????;     } } 这段代码当中有一些问题,我们一个一个来说. 首先说函数签

  • 一起来学习C++中类的this指针以使用

    目录 一,this指针的注意点 错误用例: 二,this指针存在哪里 三,this指针的面试坑题 总结 c++的类中,非静态的成员函数都有一个隐藏的this指针,在函数体中所以的成员变量都是通过this指针来访问的.但是this指针是对用户是透明的,用户不需要显示的给this指针传参,编译时会自动接收参数. 一,this指针的注意点 调用成员函数时,不可以显示给this指针传参 定义成员函数时,不能显示的声明this指针 在成员函数内部,可以显示的使用this指针 用一个日期类,来讲述this指

  • C++ 中this指针的用途详解

    目录 1.区分形参和变量同名时: 2.return *this返回函数本身 总结 先说结论: 1.形参和变量同名时,可用this指针来区分 2.在类的非静态成员函数中返回本身,可用return *this 1.区分形参和变量同名时: #include <iostream> using namespace std; class Person { public: Person(int age) { age = age; } int age; }; void test01() { Person p1

  • C++中this指针理解及作用

    目录 01.C++程序到C程序的翻译 02.this指针的作用 03.this指针和静态成员函数 04.小结 01.C++程序到C程序的翻译 想要理解C++语言中的this指针,下面我们做一个举例,我们要先把下面的C++代码转换成C代码: (1)大家知道,C语言中没有类定义class关键词,但是有跟class类似的定义关键词,就是struct结构体定义.m_height变量是Tree类的成员变量,那么我们就可以把Tree类和成员变量翻译成下面的C代码: (2)SetHeight函数是Tree类的

  • C++超详细讲解内存空间分配与this指针

    目录 成员属性和函数的存储 空对象 成员属性的存储 成员函数的存储 this指针的概念 解决名称冲突 返回对象指针*this 总结 成员属性和函数的存储 在C++中成员变量和成员函数是分开存储的: 空对象 class Person {}; 这里我直接创建一个空的类,并创建一个空的类对象(Person p),利用sizeof关键字输出p所占内存空间,sizeof(p);结果是p=1: 注意:空对象占用内存空间为: 1.C++编译器会给每个空对象分配一个字节空间,是为了区分空对象占内存的位置 2.每

  • C++对象模型和this指针详解

    目录 对象模型 一. 二. 三. 四. 五. this指针 一. 二. 总结 对象模型 成员变量和成员函数分开存储 一. 只有非静态成员变量才属于类的对象上 空对象占用字节为1 class Person { }; void test01() { Person p; cout << "size of = " << sizeof(p) << endl; } int main() { test01(); system("pause");

  • C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针

    目录 1.指向函数的指针 2.对象指针 3.this指针 4.指向类的非静态成员的指针 5.指向类的静态成员的指针 1.指向函数的指针 函数的代码在内存中的首地址,是由函数名表示的,也就是说函数名等价于函数代码首地址.因此,可以定义一个指向函数的指针,即函数指针.函数指针定义和赋值的语法如下,其中数据类型代表指向函数的返回类型,形参表为指向函数的形参表:赋值时必须保证指向的函数名和函数指针的返回类型和形参完全相同: 数据类型 (*函数指针名)(形参表);函数指针名 = 函数名; 下面的例子定义了

  • C++简明图解this指针的使用

    目录 成员数据和成员函数的存储方式 this指针的引入 this指针概述 this指针的使用 c++的封装性:将数据 和 方法 封装在一起 数据 和 方法 是分开存储. 每个对象 拥有独立的数据. 每个对象 共享同一个方法. 成员数据和成员函数的存储方式 1.成员函数不占类的空间 2.静态成员数据不占类的空间 this指针的引入 class Data { public: int m_num; void setNum(int num) { m_num = num; } }; void test01

  • WINDOWS系统下怎样配置squid做CDN的简明图解

    先提条件,您预安装配置squid的这台计算机必须是联入网络的,系统版本是windows 2000/xp/2003/server 2003. 1)先下载Squid for Windows版本(http://www.jb51.net/softs/43599.html),下载地址如下(ZIP文件名称:squid-2.7.STABLE4-bin.zip),可以把这个文件下载到桌面,这样好找好操作. Squid是Linux/Unix下著名的代理服务器软件,很多商业版本的代理服务器都是基于Squid进行开发

  • C语言指针的图文详解

    目录 指针是什么? 指针和指针变量 1. 指针类型决定了指针进行解引用操作的时候,能访问空间的大小 2. 指针加减整数 野指针 野指针的成因 指针和数组 二级指针 指针数组.数组指针 总结 指针是什么? 指针(Pointer)是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 换句话说就是可以通过指针找到以它为地址的内存单元. 理解:内存图解. 指针是个变量,存放内存单元的地址(编号). int main(){ int a = 10;//在内存中开辟空间存储 int* p = &a;

  • 详解Java之冒泡排序与选择排序

    目录 一.冒泡排序 1.概念 2.图解 3.代码的思路 4.代码例子 二.选择排序 1.概念 2.图解 3.代码的思路 总结 一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思义就是数字不断比较然后最大的突出来,也就是说把相邻的两个数字两两比较,当一个数字大于右侧相邻的数字时,交换他们的位置,当一个数字和他右侧的数字小于或等于的时候,不交换. 2.图解 关于冒泡排序我自己画了一幅图来描述他的一轮过程 这里我举了五个无序的数{7,3,6,5,4} 由此可看出他不断与右侧

  • C++冒泡排序与选择排序详解

    目录  一.冒泡排序 1.概念  2.图解 3.代码的思路 4.代码例子  二.选择排序 1.概念 2.图解 3.代码的思路 总结  一.冒泡排序 1.概念 冒泡排序这种排序方法其实关键词就在于冒泡两个字,顾名思义就是数字不断比较然后最大的突出来,也就是说把相邻的两个数字两两比较,当一个数字大于右侧相邻的数字时,交换他们的位置,当一个数字和他右侧的数字小于或等于的时候,不交换.  2.图解 关于冒泡排序我自己画了一幅图来描述他的一轮过程 这里我举了五个无序的数{7,3,6,5,4}  由此可看出

  • C语言简明分析指针与引用的具体用法

    目录 1.指针 2.引用 1.指针 在计算机中,数据是存放在内存单元中的,一般把内存中的一个字节称为一个内存单元.为了更方便地访问这些内存单元,可预先给内存中的所有内存单元进行地址编号,根据地址编号,可准确找到其对应的内存单元.由于每一个地址编号均对应一个内存单元,因此可以形象地说一个地址编号就指向一个内存单元.C 语言中把地址形象地称作指针. 主要就是两个运算符:&和*. & 表示求地址,*表示求地址中的值,*也可以用来定义指针(int *p表示整型指针): int a=1; int *

  • C语言简明介绍指针的使用

    目录 1. 指针类型 2. 野指针 3. 指针的运算 3.1 指针+-整数 3.2指针-指针 3.3 指针的关系运算 4. 指针数组 1. 指针类型 指针以字节为单位: 指针类型决定了解引用时能访问的空间的大小:也决定了指针的步长(指针+1走多远) 2. 野指针 指针未初始化 指针越界访问 指针指向的空间已释放 int* test() { int a = 10;//野指针 return &a; } int main(){ int* p = test(); //test函数里的a是局部变量,出函数

  • 简明的C++函数指针学习教程

    定义 每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针. 语法 数据类型 (*指针变量名)(参数表): int (*myFunc)(double b, int c); 说明 函数指针的定义形式中的数据类型是指函数的返回值的类型. 区分下面两个语句: int (*p)(int a, int b);//p是一个指向函数的指针变量,所指函数的返回值类型为整型 int *p(int a, int b);//p是函数名,此函数的返回值类型为整型指针 指向函数的指针变量不

  • C语言简明清晰讲解结构体

    目录 本质 简单使用 一些写法 我套我自己 内存对齐 举例-int char char 举例-char int char 举例-char char int 由结构体指针访问成员 本质 一些值的集合. 简单使用 #include <stdio.h> struct User { char uName[20]; char uPass[20]; }; int main() { struct User u1 = { "abc","123" }; printf(&q

  • [js高手之路]图解javascript的原型(prototype)对象,原型链实例

    我们通过原型方式,解决了多个实例的方法共享问题,接下来,我们就来搞清楚原型(prototype),原型链的来龙去脉. function CreateObj(uName) { this.userName = uName; } CreateObj.prototype.showUserName = function(){ return this.userName; } var obj1 = new CreateObj('ghostwu'); var obj2 = new CreateObj('卫庄')

随机推荐