iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >如何理解C++对象模型和this指针
  • 664
分享到

如何理解C++对象模型和this指针

2023-06-25 11:06:36 664人浏览 独家记忆
摘要

本篇内容主要讲解“如何理解c++对象模型和this指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解C++对象模型和this指针”吧!对象模型成员变量和成员函数分开存储一、只有非静态成员

本篇内容主要讲解“如何理解c++对象模型和this指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解C++对象模型和this指针”吧!

对象模型

成员变量和成员函数分开存储

一、

只有非静态成员变量才属于类的对象上

空对象占用字节为1

 class Person{};void test01(){Person p;cout << "size of = " << sizeof(p) << endl;}int main(){test01();system("pause");return 0;}

如何理解C++对象模型和this指针

占用内存空间为 1 的原因是:如果有其他的空对象,各自分配一个内存空间可以让两者之间相互区别,而且 1 字节也很省内存。 所以每个空对象都会有一个自己的内存地址。

二、

class Person{int m_A;//改为有内容};void test02(){Person p;cout << "size of = " << sizeof(p) << endl;}int main(){test02();system("pause");return 0;}

如何理解C++对象模型和this指针

因为 int 类型 ,不把之前的空类型考虑进去。

三、

将Person类改为

class Person{int m_A;// 非静态成员变量 属于类的对象上static int m_B;// 添加 静态成员变量 不属于类的对象上};int Person::m_B = 0;

如何理解C++对象模型和this指针

非静态成员变量 属于类的对象上

静态成员变量,不属于类对象上

所以不考虑在内

四、

class Person{int m_A;// 非静态成员变量 属于类的对象上static int m_B;// 添加 静态成员变量 不属于类的对象上void func()  //非静态成员函数{}};int Person::m_B = 0;

如何理解C++对象模型和this指针

所以成员变量和成员函数是分开存储的,非静态成员函数不属于类对象上

五、

static voidfunc()

{}

静态成员函数也不会增加 不属于类对象上

this指针

用于区分类中多个对象调用函数时,分别都是哪个函数在调用自己。

this 指针指向被调用成员函数所属的对象

特点:

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

this 指针不需要定义,直接使用即可。

用途:

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

在类的非静态成员变量中返回对象本身,可使用return *this

一、

  class Person{public:Person(int age)//变量{//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决和变量的名称冲突this->age = age;//前一个为成员变量,后一个age为形参}int age;};void test01(){Person p1(18);cout << "p1的年龄为: " << p1.age << endl;}main(){test01();system("pause");return 0;}

如果不加 this 都会默认为形参 age ,从而报错。

this 指向被调用的对象,此时为 p1。

二、

class Person{public:Person(int age){//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决和变量的名称冲突this->age = age;}void PersonAddAge(Person &p){this->age += p.age;}int age;};void test01(){Person p1(18);cout << "p1的年龄为: " << p1.age << endl;}//返回对象本身用*this void test02(){Person p1(10);Person p2(10);p2.PersonAddAge(p1);cout << "p2年龄:" << p2.age << endl;}int main(){test01();test02();system("pause");return 0;}

此时p2为 20 ,若要多次相加需要改动为

class Person{public:Person(int age){//this指针指向的是被调用成员函数的所属对象//即 p1, 所以可以解决和变量的名称冲突this->age = age;}Person& PersonAddAge(Person &p)//此处void 改为Peroson是因为返回值如果是p2的话,就可以将p2.PersonAddAge(p1) 看作p2,然后继续调用之后的PersonAddAge(p1)//此处的Person &p是以 引用的方式传入//此处的Person& 是以引用的方式返回{this->age += p.age;// this是指向p2的指针,而*this就是p2本体return* this;}int age;};void test01(){Person p1(18);cout << "p1的年龄为: " << p1.age << endl;}//返回对象本身用*this void test02(){Person p1(10);Person p2(10);p2.PersonAddAge(p1).PersonAddAge(p1).PersonAddAge(p1);cout << "p2年龄:" << p2.age << endl;}int main(){test01();test02();system("pause");return 0;}

如何理解C++对象模型和this指针

链式编程思想:可以往后无限的追加。

但如果函数,不使用引用方法,返回的是一个值,就会创建新的对象

Person PersonAddAge(Person &p)//不使用引用方法{this->age += p.age;// this是指向p2的指针,而*this就是p2本体return* this;}int age;};

在第一次调用Person PersonAddAge()后 ,p2加了10, 但在这之后返回的并不是本体了,而是根据本体创建的一个新的数据。Person 和 *this 是不一样的数据(见拷贝构造函数的调用时机-以值方式返回局部对象)。 所以每一次Person PersonAddAge()后,都是一个新的对象,所以最后输出结果p2 是不变的20。

疑问:至于为什么不是p2 为 10 。 以值方式返回局部对象会调用拷贝构造函数。对p2进行一次PersonAddAge操作后,将p2的结果拷贝为p2' 。所以p2还是经过了一次加年龄的操作的 。对p2进行一次PersonAddAge操作后,将p2的结果拷贝为p2'

到此,相信大家对“如何理解C++对象模型和this指针”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 如何理解C++对象模型和this指针

本文链接: https://www.lsjlt.com/news/304323.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解C++对象模型和this指针
    本篇内容主要讲解“如何理解C++对象模型和this指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何理解C++对象模型和this指针”吧!对象模型成员变量和成员函数分开存储一、只有非静态成员...
    99+
    2023-06-25
  • C++对象模型和this指针详解
    目录对象模型一、二、三、四、五、this指针一、二、总结对象模型 成员变量和成员函数分开存储 一、 只有非静态成员变量才属于类的对象上 空对象占用字节为1 class Pe...
    99+
    2024-04-02
  • C++对象模型与this指针怎么使用
    这篇“C++对象模型与this指针怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++对象模型与this指针怎么使用...
    99+
    2023-06-30
  • C++深入探究类与对象之对象模型与this指针使用方法
    目录C++对象模型和this指针1 成员变量和成员函数分开存储2 this指针概念3 空指针访问成员函数4 const修饰成员函数C++面向对象的三大特性为:封装、继承、多态 C++...
    99+
    2024-04-02
  • C++函数指针+对象指针+this指针+指向类静态和非静态成员的指针
    目录1、指向函数的指针2、对象指针3、this指针4、指向类的非静态成员的指针5、指向类的静态成员的指针 1、指向函数的指针 函数的代码在内存中的首地址,是由函数名表示的,也就是说函...
    99+
    2024-04-02
  • C++函数指针,对象指针,this指针,指向类静态怎么用
    这篇文章主要介绍了C++函数指针,对象指针,this指针,指向类静态怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++函数指针,对象指针,this指针,指向类静态怎么用文章都会有所收获,下面我们一起来看...
    99+
    2023-06-29
  • C++this指针怎么理解
    C++this指针怎么理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。还是Stock股票这个类,假设我们要实现一个方法,比较一下当前股票和传入的股票, 返回价格高的那个股票。...
    99+
    2023-06-22
  • C++中this指针理解及作用
    目录01、C++程序到C程序的翻译02、this指针的作用03、this指针和静态成员函数04、小结01、C++程序到C程序的翻译 想要理解C++语言中的this指针,下面我们做一个...
    99+
    2024-04-02
  • 如何理解C++指针常量和常量指针
    目录术语常量指针(pointer to const)指针常量(指针)前言: 应该怎样正确的姿势去理解指针常量和常量指针,到我发布这篇文章时候,感觉自己对指针常量和常量指针理解还是不够...
    99+
    2024-04-02
  • C++ 函数指针和函数对象
    c++++ 函数指针和函数对象是处理函数的工具。函数指针存储函数地址,函数对象则允许重载操作符和维护状态。它们在排序算法、事件处理和策略模式中都有应用,可提高代码灵活性、重用性和可维护性...
    99+
    2024-04-12
    c++ 函数指针 函数对象
  • Hibernate和模型对象怎么理解
    这篇文章主要讲解了“Hibernate和模型对象怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Hibernate和模型对象怎么理解”吧!学习Hibernate时,经常会遇到一些小问题...
    99+
    2023-06-17
  • 如何理解C语言中的指针类型
    如何理解C语言中的指针类型,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。0.问题知乎上回答了一个粉丝问题,结果这兄弟又连续问了...
    99+
    2024-04-02
  • 如何理解DOM文档对象模型
    如何理解DOM文档对象模型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。向大家描述一下DOM文档对象模型,文档对象模型(DocumentO...
    99+
    2024-04-02
  • 详解JavaScript原型对象的this指向问题
    目录一、this指向二、修改this指向1、call()方法2、apply()方法总结 一、this指向 构造函数中的this 指向实例对象。那么原型对象this的指向呢? 如下:...
    99+
    2024-04-02
  • C++静态成员函数和this指针详解
    目录静态成员1.静态成员变量2.静态成员函数成员变量和成员函数分开存储this 指针空指针访问成员函数总结静态成员 静态成员就是在成员变量和成员函数前加上关键字static,称为静态...
    99+
    2024-04-02
  • 深入理解c++指针的指针和指针的引用
    在C++中,指针是一种数据类型,可以存储变量的内存地址。指针的指针和指针的引用是两种特殊的指针类型。指针的指针是指一个指针变量的值是另一个指针的地址。也就是说,指针的指针存储的是一个指针变量的地址。可以通过多次间接引用来获取最终指向的变...
    99+
    2023-08-09
    c++
  • 怎么理解C++指针常量和常量指针
    本篇内容主要讲解“怎么理解C++指针常量和常量指针”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解C++指针常量和常量指针”吧!术语常量指针和引用类似,可以定义指针可以指向常量或者非常量类...
    99+
    2023-06-30
  • 如何理解C语言函数传参:指针的指针
    这篇文章主要介绍“如何理解C语言函数传参:指针的指针”,在日常操作中,相信很多人在如何理解C语言函数传参:指针的指针问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解C语言函数传参:指针的指针”的疑惑有所...
    99+
    2023-06-15
  • 如何理解C++中的类和对象
    如何理解C++中的类和对象,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一.构造函数1.构造函数的定义:构造函数 是一个 特殊的成员函数,名字与类名相同 , 创...
    99+
    2023-06-25
  • ADO.NET对象模型怎么理解
    这篇文章主要讲解了“ADO.NET对象模型怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“ADO.NET对象模型怎么理解”吧!许多VS开发人员似乎都这么想,认为所有的Oracle的东西...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作