《C++进阶--6.C++对象模型和this指针》

基于FFT的轴承故障诊断 - MATLAB代码和详细解释 最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。最后,我们可以根据异常特征的位置和特征分析来确定轴承故障的类型。因此,通过分析频谱图,我们可以识别轴承故障的特征。因此,通过分析频谱图,我们可以识别轴承故障的特征。我们可以选择适当的阈值,并在频谱图上标记异常特征。通过这种基于FFT的轴承故障诊断方法,我们可以快速、准确地检测和诊断轴承故障。接下来,我们将应用FFT来获取振动信号的频谱信息,频谱显示了信号在不同频率上的能量分布。通过将异常特征标记在频谱图上,我们可以直观地识别轴承故障的存在。 阅读详情

目录

6. C++对象模型和this指针

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

        6.2 this指针概念

        6.3 空指针访问成员函数

        6.4 const修饰成员函数(常函数)


6. C++对象模型和this指针

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

在C++中,类内的成员变量和成员函数分开存储

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

示例:

class Person1 {
public:
    Person() {
        mA = 0;
    }
    //非静态成员变量占对象空间(内存对齐)
    int mA;
    //静态成员变量不占对象空间
    static int mB; 
    //函数也不占对象空间,所有函数共享一个函数实例
    void func() {
        cout << "mA:" << this->mA << endl;
    }
    //静态成员函数也不占对象空间
    static void sfunc() {
    }
};
​
class Person2 {
    
};
int main() {
    //空对象占用内存为:1字节
    //c++编译器会给每个空对象也分配一个字节的空间,是为了区分空对象占内存的位置
    //每个空对象也应该有一个独一无二的没存地址
    cout << sizeof(Person2) << endl;  //1
    cout << sizeof(Person1) << endl;
​
    system("pause");
​
    return 0;
}

6.2 this指针概念

通过6.1我们知道在C++中成员变量和成员函数是分开存储的

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码

那么问题是:这一块代码是如何区分那个对象调用自己的呢?

c++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象

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

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

this指针的用途:

  • 当形参和成员变量同名时,可用this指针来区分(解决名称冲突)

  • 在类的非静态成员函数中返回对象本身,可使用return *this(返回对象本身用 *this)

示例:
class Person
{
public:
​
    Person(int age)
    {
        //1、当形参和成员变量同名时,可用this指针来区分
        this->age = age;
    }
​
    Person& PersonAddPerson(Person p)
    {
        this->age += p.age;
        //this是指向p2的指针,而*this指向的是p2这个对象的本体
        //返回对象本身,返回值类型需要为引用Person&
        return *this;
    }
​
    int age;
};
​
void test01()
{
    Person p1(10);
    cout << "p1.age = " << p1.age << endl;
​
    Person p2(10);
    //链式编程思想
    p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);
    cout << "p2.age = " << p2.age << endl;
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

6.3 空指针访问成员函数

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针

如果用到this指针,需要加以判断保证代码的健壮性

示例:

//空指针访问成员函数
class Person {
public:
​
    void ShowClassName() {
        cout << "我是Person类!" << endl;
    }
​
    void ShowPerson() {
        //判空,提高代码的健壮性
        if (this == NULL) {
            return;
        }
        cout << mAge << endl;//属性前面都默认加了this->,即mAge<==>this->mAge
    }
​
public:
    int mAge;
};
​
void test01()
{
    Person * p = NULL;
    p->ShowClassName(); //空指针,可以调用成员函数
    p->ShowPerson();  //但是如果成员函数中用到了this指针,就不可以了(此时的对象本身是NULL)
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

6.4 const修饰成员函数(常函数)

常函数:

  • 成员函数后加const后我们称为这个函数为常函数

  • 常函数内不可以修改成员属性

  • 成员属性声明时加关键字mutable后,在常函数中依然可以修改

常对象:

  • 声明对象前加const称该对象为常对象

  • 常对象只能调用常函数

示例:

class Person {
public:
    Person() {
        m_A = 0;
        m_B = 0;
    }
​
    //this指针的本质是一个指针常量(Person* const this),指针的指向不可修改,指向的值可以修改
    //如果想让指针指向的值也不可以修改,需要声明常函数,常函数中const的本质修饰的是this指针
    void ShowPerson() const {//相当于const Person* const this, 指针的指向不可以修改,指向的值也不可以修改
        //const Type* const pointer;
        //this = NULL; //不能修改指针的指向 Person* const this;
        //this->mA = 100; //但是this指针指向的对象的数据是可以修改的
​
        //const修饰成员函数,表示指针指向的内存空间的数据不能修改,除了mutable修饰的变量
        this->m_B = 100;
    }
​
    void MyFunc() const {
        //mA = 10000;
    }
​
public:
    int m_A;
    mutable int m_B; //mutable休书的特殊成员变量可修改,即使在常函数中也可以修改其值
};
​
​
//const修饰对象  常对象
void test01() {
​
    const Person person; //常量对象  
    cout << person.m_A << endl;
    //person.mA = 100; //常对象不能修改成员变量的值,但是可以访问
    person.m_B = 100; //但是常对象可以修改mutable修饰成员变量
​
    //常对象访问成员函数
    person.ShowPerson(); //常对象只能调用常函数
    //person.MyFunc(); 常对象 不可以调用普通的成员函数,因为普通成员函数可以修改属性
}
​
int main() {
​
    test01();
​
    system("pause");
​
    return 0;
}

深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计 大家好,我是微学AI ,今天给大家介绍一下深度学习实战87-高中数学自适应测试系统研究与应用研发,前后台页面设计。高中数学自适应测试系统旨在通过精准评估学生能力,用最少的题目发现其薄弱环节,并提供定制化的学习计划,帮助学生快速提升成绩。同时,系统结合了AI大模型实现自动判卷、生成报告,减轻教师负担,并支持个性化作业布置,使教学更加高效。学生可以清晰了解自身学习状态,教师也能获得精准的学生画像,实现差异化教学。 阅读详情

相关推荐

SkyWalking跨线程Trace传递实战:手把手教你用RunnableWrapper解决异步链路中断问题

本文深入解析了SkyWalking在异步编程场景下链路追踪中断的根源,并提供了使用RunnableWrapper等官方包装类的实战解决方案。通过详细的原理解析和代码示例,手把手指导开发者如何实现跨线程的Trace传递,确保分布式系统监控链路的完整性,有效解决异步任务导致的链路中断问题。

sand8的博客 493

C++对象模型this指针

C++对象模型this指针

qqrrjj2011的博客 1430

【同花顺公式编辑教程】第4章 功能函数

本章节主要给出大部分能够运行且常用的同花顺指标编辑器提供的函数。其中,计算类函数不作演示,绘图类函数提供示例及示例运行结果。

LiaoYi2016218的博客 2万+

【C++漂流记】C++对象模型和this指针

C++中对象模型和this指针是面向对象编程中的重要概念。对象模型描述了对象在内存中的布局和行为,包括成员变量和成员函数的存储方式和访问权限。this指针是一个隐含的指针,指向当前对象的地址,用于在成员函数中引用当前对象的成员变量和成员函数。对象模型和this指针的理解和应用,对于深入理解C++的面向对象特性和实现细节至关重要。

Goforyouqp的博客 2048

Ardupilot姿态控制详解(完结篇)

本文主要是对过去写的一些APM中姿态控制流程及函数博文的汇总。 按照之前写的博文以及个人认为的学习顺序,给出APM姿态控制器的学习顺序如下: APM姿态旋转理论基础 Ardupilot姿态控制器 PID控制流程(整定后的P控制器) 详解APM的开方控制器sqrt_controller Ardupilot前馈及平滑函数input_euler_angle_roll_pitch_yaw解析 Ardupilot倾转分离函数thrust_heading_rotation_angles Ardupilot四元数姿态控制

moumde的博客 7023

双足肌肉骨骼机器人

Clone Alpha的技术突破标志着人类进入生物-机械融合的新纪元,但其影响远超技术范畴。从伦理框架重建(如拉马克进化算法中的知识传递机制)到经济模式革新(如UBI应对机器人失业潮),需全球协作制定前瞻性政策。若放任技术无序扩张,人类社会或将面临“能力断层”与“控制权丧失”的双重危机;反之,若以人类福祉为核心导向,仿生机器人亦可成为弥合残障歧视、提升整体文明层级的钥匙。当下选择,将决定人类究竟是技术的创造者,还是被重构的客体。

百态·数智思维 | 聚焦大数据、量化与未来AI 985

深入探秘C++对象模型中的this指针

在深入探讨this指针之前,我们先来了解一下 C++ 对象模型的基础。在 C++ 中,类的成员变量和成员函数是分开存储的。这意味着,当我们创建一个类的对象时,对象中只包含成员变量,而成员函数则存储在代码段中,所有该类的对象共享这些成员函数。这样的设计大大提高了内存的使用效率,避免了每个对象都重复存储相同的函数代码。

大雨淅淅的博客 873

恭喜,恭喜,iMouse爱鼠XP版全面发布测试,苹果手机自动化测试必须

电脑控制苹果手机,免越狱,免签名,自动化测试

qq_41057894的博客 1061

探索C++对象模型:This指针与(构造、析构)成员函数的深度解析(中篇)

 在C++的面向对象编程中,对象模型是理解语言行为的核心。无论是类的成员函数如何访问数据,还是资源管理如何自动化,其底层机制均围绕两个关键概念展开:this指针与六大默认成员函数。它们如同对象的“隐形守护者”,默默支撑着代码的健壮性与效率。本文将从技术底层出发,结合内存布局、编译器行为与实际案例,深入探讨:

月亮永悬不落,剑指巅峰 1796

QMT与通达信代码实战:从预警到交易的自动化实现

本文详细介绍了如何利用QMT量化交易平台与通达信软件实现从预警到交易的全自动化。通过读取通达信预警生成的板块文件,QMT策略可自动执行买卖指令,有效解决手动交易滞后问题。文章提供了完整的代码框架、核心原理拆解及实盘注意事项,帮助投资者构建高效、纪律性的自动化交易系统。

ansible6ops的博客 648

ZYNQ 系统的IEEE1588 实现方法

zynq IEEE588/PTP 实现方案(讨论稿)

姚家湾博客 1万+

第三层:C++对象模型和this指针

🎉welcome🎉✒️博主介绍:一名大一的智能制造专业学生,在学习C/C++的路上会越走越远,后面不定期更新有关C/C++语法,数据结构,算法,Linux,ue5使用,制作游戏的心得,和大家一起共同成长。

weixin_72867798的博客 2824

基于YOLOv8的植物生长阶段识别系统设计与实现

本文详细介绍了一个基于YOLOv8深度学习模型的植物生长阶段识别系统,包含完整的数据集构建、模型训练、评估以及基于PyQt5的用户界面开发过程。系统能够自动识别植物在不同生长阶段(如发芽期、生长期、开花期、结果期等)的形态特征,为精准农业和智能种植提供技术支持。文章提供了完整的代码实现,并讨论了模型优化策略和实际应用场景。关键词:植物生长阶段识别、YOLOv8、目标检测、PyQt5、深度学习。

YOLO 465

[C++核心编程-06]----C++类和对象之对象模型和this指针

在C++中,对象模型和this指针是面向对象编程的两个重要概念,它们有助于理解类和对象之间的关系以及在类的成员函数中操作对象的方式。对象模型是用来描述类和对象之间关系的一种模型,它包括了对象的内存布局和对象访问的机制。在C++中,每个对象都有自己的一组成员变量和方法,这些成员变量和方法定义在类中。当创建一个对象时,该对象会占用一些内存空间来存储其成员变量,并且会有一个指向类的指针,这个指针指向该对象所属的类。this指针是一个隐含的指针,它指向当前对象的地址。

一伦明悦的博客 1319

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C++:对象模型和this指针

1 C++对象模型和this指针 1.1 成员变量和成员函数分开存储 1.2 this指针概念 1.3 空指针访问成员函数 1.4 const修饰成员函数

我是程序员Amin,关注我,带你学习有趣的计算机知识 1077

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C++面向对象(类和对象)—— 对象模型 和 this指针(封装、继承、多态)

C++面向对象 this指针项目基础。

2401_87692970的博客 1780

C++类与对象【对象模型和this指针】

关注博主,获取更多关于C++的优质内容!

m0_51574586的博客 1075

C++之对象模型和this 指针,友元,和运算符重载

this指针指向被调用的成员函数所属的对象c++通过提供特殊的对象指针,this指针,解决上述问题。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。客厅所有来的客人都可以进去,但是你的卧室是私有的,也就是说只有你能进去。生活中你的家有客厅(Public),有你的卧室(Private)作用:重载关系运算符,可以让两个自定义类型对象进行对比操作。但是呢,你也可以允许你的好闺蜜好基友进去。

bai_lan_ya的博客 1080

cpp自学 day15(类和对象——对象模型和this指针)

​概念​核心要点​空对象内存占1字节,保证对象有唯一地址。​this指针隐含指针,指向调用者对象;支持链式编程和解决命名冲突。​常函数用const修饰,禁止修改成员变量(mutable例外)。​常对象用const修饰,只能调用常函数,禁止修改非mutable成员。关联记忆this->明确指向 → 常函数锁成员 → 常对象限调用 → mutable破约束。

CWNU_Dragon的博客 902

(六)C++类和对象之对象模型和this指针

C++类和对象之对象模型和this指针

今天也要加油呀ʕ ᵔᴥᵔ ʔ 780

C++:类的对象模型和this指针

类的大小是该类中所有“成员变量”的和(不计算成员函数),还有注意内存对齐。上图中,A1中只有成员函数,类的大小不计算成员函数,所有大小相当于空类,为1。A2也只计算了_a的字节大小,为4。

2302_79988283的博客 454

C++对象模型和this指针

C++对象模型和this指针 成员变量和成员函数分开存储 在C++中,类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include <iostream> using namespace std; class Person { public: Person() { mA = 0; } //非静态成员变量占对象空间 int mA; //静...

qq_39368007的博客 328

4.3 C++对象模型和this指针

this指针是一个常量指针,可以看做const type * this ,指针的指向不能修改,this = NULL这样是错的。每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。在类的非静态成员函数中返回对象本身,可使用return *this。c++通过提供特殊的对象指针,this指针,解决上述问题。this指针是隐含每一个非静态成员函数内的一种指针。在C++中,类内的成员变量和成员函数分开存储。

colortztzztzt的博客 1101

C++编程——C++对象模型和this指针

文章目录1. C++对象模型2. this指针 1. C++对象模型 C++中类对象的成员变量和成员函数是分开存储的 非静态成员变量,属于类的对象上 静态成员变量,不属于类的对象上 非静态成员函数,不属于类的对象上 静态成员函数,不属于类的对象上 即只有非静态成员变量才属于类的对象上 示例1:(空类的对象模型) class Person { }; void test() { Person p; //空对象占用的内存空间为1 //C++编译器会给每个空对象也分配一个字节空间,是为了区分空对象占

professor_tao的博客 1040

c++入门学习⑤——对象模型和this指针

成员变量和成员函数是分开存储的this指针指向被调用的成员函数所属对象它是隐含在每一个非静态成员函数的一种指针,不须定义空指针可以调用成员函数,但由于有this指针,容易有坑,出错。提高代码的健壮性用if来预防有空指针的调用,空指针可以访问,但是不可以去使用在正常的带属性的一个成员函数内,会导致程序崩溃的希望这篇有关c++对象模型和this指针的博客对大家有所帮助,欢迎大佬们留言o(* ̄▽ ̄*)ブ一起学习进步!!!

2301_79328557的博客 930

C++核心编程(四)—— 类和对象(3) :C++对象模型和this指针

4. C++对象模型和this指针4.1 成员变量和成员函数分开存储4.2 this指针概念4.3 空指针访问成员函数4.4 const修饰成员函数 4. C++对象模型和this指针 4.1 成员变量和成员函数分开存储   在C++中,类内的成员变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。   实例如下所示。 #include<iostream> using namespace std; //成员变量和成员函数分开存储 class Person { int m_A; .

大彤小忆的博客 3628

C++之this指针

关于this指针,有以下几点总结:1)this指针指向当前对象,可以访问当前对象的所有成员变量。包括private、protected、public。2)this指针是const指针,一切企图修改该指针的操作,如赋值(改变指向)、增减都是不允许的!3)this指针只有在成员函数中才有定义。因此,在创建一个对象后,也不能通过对象使用this指针。所以,我们也无法知道一个对象的this指针的位置(只有在成员函数里才有this指针的位置)。

xinxin的博客 896
上一篇: 《C++进阶--5.对象的初始化和清理》
下一篇: 《C++进阶--7.友元》
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序猿!=程序员

感谢来过,感谢有你!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值