理解C++类成员指针(指向类成员的指针)

QT上位机开发(掌握一点c++基础) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 c++是c语言的补充和扩展,本身的语法构成也是在一直迭代中。相信很多同学上大学读书的时候,或多或少对c语言有所了解,对它的变量、指针、函数也应该不陌生。既然大家都有c语言基础的话,那么在这方面稍微拓展一下的话,就可以学会c++了。当然c++本身的内容很多,很多方面还很琐碎,但我们学习的时候还是应该把精力放在那些经常使用到的语法上面。 阅读详情

指向类成员的指针运算符 .* 和 ->* 返回表达式左侧指定的对象的特定类成员的值。右侧必须指定类的成员。以下示例显示如何使用这些运算符:

// compile with: /EHsc

#include <iostream>

using namespace std;

class Testpm {

public:

    void m_func1() { cout << "m_func1\n"; }

    int m_num;

};

// 定义两个类型 pmfn 和pmd.

// 这两个类型分另是指向类成员的 m_func1() 和 m_num指针。

void (Testpm::* pmfn)() = &Testpm::m_func1;

int Testpm::* pmd = &Testpm::m_num;

int main()

{

    Testpm ATestpm;

    Testpm* pTestpm = new Testpm;

    // 访问成员函数

    (ATestpm.*pmfn)();  //相当于解引用,指针存的是函数地址

    (pTestpm->*pmfn)();   // 要求使用(),类为 * 绑定不如函数紧密

   

// 访问数据成员

    ATestpm.*pmd = 1;

    pTestpm->*pmd = 2;

    cout << ATestpm.*pmd << endl

        << pTestpm->*pmd << endl;

    delete pTestpm;

}

//输出:

m_func1

m_func1

1

2

在前面的示例中,指向成员的指针 pmfn 用于调用成员函数 m_func1。另一个指向成员的指针 pmd 用于访问 m_num 成员。

二元运算符 .* 将其第一个操作数(必须是类类型的对象)与第二个操作数(必须是指向成员的指针类型)组合在一起。

    二元运算符 ->* 将其第一个操作数(必须是类类型的对象的指针)与第二个操作数(必须是指向成员的指针类型)组合在一起。

    在包含 .* 运算符的表达式中,第一个操作数必须是第二个操作数中指定的指向成员的指针的类类型,并且可由该指针访问,或者属于明确从该类派生并可由该类访问的可访问类型。

在包含 ->* 运算符的表达式中,第一个操作数必须是第二个操作数中指定的类型的“指向类类型的指针”类型,或者必须是明确从该类派生的类型。

例如,考虑下面的类和片段:

class BaseClass {

public:

    BaseClass(); // 基类构造函数.

    void Func1();

};

// 声明一个指向成员函数 Func1的指针 。

void (BaseClass::* pmfnFunc1)() = &BaseClass::Func1;

class Derived : public BaseClass {

public:

    Derived();  // 派生类构造函数.

    void Func2();

};

// 声明一个指向成员函数 Func2的指针 。

void (Derived::* pmfnFunc2)() = &Derived::Func2;

int _tmain(int argc, _TCHAR* argv[])

{

    BaseClass ABase;

    Derived ADerived;

    (ABase.*pmfnFunc1)();   // OK: 定义了一个基类.

    (ABase.*pmfnFunc2)();   // 错: 不能使用基类去访问指向派生类成员的指针

    (ADerived.*pmfnFunc1)();   // OK:

    // derived from BaseClass.

    (ADerived.*pmfnFunc2)();   // OK:

    system("pause");

    return 0;

}

jdk-8u144-linux-x64.tar.gz. 该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包 立即下载

相关推荐

【自动驾驶学习笔记——Prescan和Simulink 学习笔记和问题记录(1)】

主要记录一些Prescan/Simulink 联合仿真出现的问题。

ly1336545868的博客 1464

Compiler Warning (level 1) C4407

cast between different pointer to member representations, compiler may generate incorrect code An incorrect cast was detected. C4407 can be generated because of compiler conformance work that was ...

weixin_30463341的博客 258

AD4030-24BBCZ详细资料 Analog Devices 模数转换器 - ADC 24-Bit, 2 MSPS, SAR ADC

AD4030-24BBCZ详细资料  Analog Devices 模数转换器 - ADC 24-Bit, 2 MSPS, SAR ADC

Chen_YYan的博客 794

对象数组和指向对象的指针 指向类成员的指针

1 对象数组               对象数组是指数组元素为对象的数组。这种对象数组与其它数据类型的数组定义方式相同。如:         X a[10];        它创建了一个对象数组a,有10个数组元素,每个数组元素a [i]都是一个对象,所以,需要10次调用构造函数。         C++语言不允许初始化对象数组,所以要创建一个类的对象数组,这个类必须具备以下三个条件

SzMing 2323

2023年高教社杯 | 2023年高教社杯全国大学生数学建模思路(A题思路、C题思路)

2023年高教社杯 | 2023年高教社杯全国大学生数学建模思路(A题思路、C题思路)

前程算法屋的博客 624

R语言做一个 GM (1,1)灰色预测模型

累加生成是GM(1,1)模型的另一个重要步骤,它通过构造累加生成序列,把非线性非平稳时间序列转化为线性平稳时间序列。GM(1,1)是一种基于灰色系统理论的预测模型,通常用于中小样本的非线性、非平稳时间序列数据分析。灰色预测模型的核心是灰度处理,将原始时间序列转化为灰色时间序列。这里使用R语言中的diff函数对时间序列进行一次差分,然后对结果取累加和得到灰度序列。以上是GM(1,1)灰色预测模型在R语言中的实现步骤。需要注意的是,GM(1,1)模型适用于中小样本的时间序列预测,对于长期预测效果可能较差。

Mrrunsen的博客 3841

指向类成员的指针

C++提供的一种特殊的指针,它指向类的成员,而不是指向类的一个对象中该成员的一个实例,这种指针称为指向类成员的指针。 由类外指向类内的指针变量 格式 类型符 类名::*指针名=类中数据成员地址描述`` #include <iostream> using namespace std; class FH { public: int i, *p; //类内和类外的不同,名字相同不影响。 FH() { i = 10; p = &i; } }; int

weixin_52045928的博客 332

【制作100个unity游戏之30】使用unity实现一款2d俯视角RPG战斗游戏,主要使用InputSystem+有限状态机+A*寻路实现(完结,附带项目源码)

【制作100个unity游戏之30】使用unity实现一款2d俯视角RPG战斗游戏,主要使用InputSystem+有限状态机+A*寻路实现

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4651

C++中类成员函数中的this指针

先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解...

zy20150613的博客 8624

基于jeecgboot3.9.0的项目管理——项目工作台(二)

基于jeecgboot3.9.0的项目管理——项目工作台(二)

宁波阿成的博客 205

【SpringBoot 3.x 第51节】带你玩转 GraalVM Native Image:启动快到飞起,内存省到心疼,你还不试试?

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1304

C++必知必会之(15)指向类成员的指针并非指针

1、声明一个指向成员的指针: int *ip;  //一个指向int的指针 int C::*pimC;     //一个指针,指向C的一个int成员 所要做的全部事情是使用classname::* 而不是普通的*,来表明你在指向classname的一个成员。 在其他方面,语法和常规的指针声明符一样。 2、一个常规的指针包含一个地址。如果解引用该指针,就会得到位于该地址的对

woshibendangao的专栏 991

03 - AMDGPU驱动架构概览

本文介绍了AMDGPU驱动的整体架构,重点分析其图形驱动(AMDGPU)和计算驱动(KFD)的双重结构。KFD驱动作为HSA架构的核心组件,包含进程管理、设备管理等模块,其中SVM功能在kfd_svm.c实现。文章详细解析了KFD的核心组件、初始化流程及字符设备接口,并阐述了TTM框架在GPU内存管理中的作用。通过架构图和代码片段展示了AMDGPU与KFD的协作机制,为后续深入理解SVM实现奠定基础。

图形/计算GPU的驱动与虚拟化技术分享园地 3361

6.1 对象指针和对象引用

对象引用的使用更简洁直观,同时也具有指针的传址调用特性,从而在 C++ 编程中得到了更广泛的应用。本节讲述指向对象的指针和对象的引用这两个概念及其在 C++ 编程中的应用。程序中使用了两种不同的指针:一种是指向对象的指针,另一种是指向类成员的指针。在 C++ 中,指向类成员的指针包括指向类的数据成员和指向成员函数的指针。使用指向对象的指针通过指向类成员的指针对该成员进行操作时,可使用运算符。也可以使用对象来调用指向类成员函数的指针所指向的成员函数。类的一个对象,然后通过对象来引用指针所指向的成员。

tang7mj的博客 1380

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C++类中this指针的理解

先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解...

xulingxin的博客 3331

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【类和对象】——成员方法之间的关系、指向类成员的指针

1、this指针和成员方法之间的关系 1、普通的成员方法 2、静态成员方法 3、常成员方法 2、指向类成员的指针

qq_43412060的博客 398

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++重点知识回顾三

C++类的扩展

m0_46319616的博客 169

C++(8):指向不同类型变量或函数的pointer

不同类型指针的总结。指向不同类型变量或函数的pointer。

qcyfred的博客 1845

C++57个入门知识点_18_ 类的大小+成员函数性质+this指针(类大小由成员变量决定;类对象数据独立,成员函数共用;this指针:谁创建指向谁,谁使用成员函数指向谁;类成员函数指针写法及调用)

上篇C++57个入门知识点_17 类的访问权限及C语言模拟类的封装(类的私有权限突破方法:编译期进行权限检查,运行期通过指针修改类的私有成员变量;利用函数指针对结构体中成员变量进行修改;CPU大小尾排列)讲述了类中成员的访问权限,使用C语言模拟类的封装,本篇将会介绍C++中十分重要的概念-this指针。 首先讲一下类的大小、及类里面的成员及函数的相关知识点。 上篇中我们介绍过以下clock类的大小为12字节,因为其内部有3个int类型数据,每个int为12个字节。 #include <iostream

分享学习成长历程,Winter is coming! 430

【C++类和数据抽象】隐含的 this 指针

this指针是 C++ 面向对象编程中的一个重要概念,但在使用时需要注意其隐式性、类型、作用域以及潜在的风险。正确地理解和使用this指针可以帮助你编写更加健壮和清晰的 C++ 代码。

byte轻骑兵的技术小窝 9999

c++函数指针和类函数指针

#include using namespace std; typedef int (*fun)(int); //定义函数指针类型 此时fun为函数指针类型 int demo(int a){ cout<<a<<endl; return a; } int main() { //直接定义函数指针变量 int (*func)(int); // func =

看风人Z的博客 616

C++ 函数指针

文章目录基础介绍代码普通函数指针函数指针作为参数传递给函数函数指针数组指向类成员函数的函数指针 基础介绍 1、对于普通函数名直接就代表着函数地址 2、对于类成员函数需要在函数前加上类修饰符 函数指针: 函数指针也是一种类型,可以声明,赋值。 类内的静态函数和普通函数可以用同样的方式使用,就是直接利用函数指针执行,而类的普通成员函数的使用需要加上类的实例在前面,解引用的符号也不一样需要加上* 代码 普通函数指针 //**********************普通函数指针*******************

weixin_42376458的博客 179

C指针,C语言中的指针详解

有错误的地方带查证: 一、 数组的指针、指针数组以及指向指针的指针 考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来位 一、数组的指针、指针数组以及指向指针的指针     考虑数组的指针的时候我们要同时考虑类型和维数这两个属性。换一句话,就是说一个数组排除在其中存储的数值,那么可以用类型和维数来

Allen.Yao的专栏 674

学习笔记(08):C++语言基础视频教程-3.7 对象指针

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过...

cangersuifeng的博客 181

C++中的this指针详解

this是指向当前对象的指针常量主要用于解决命名冲突、链式调用和对象比较静态成员函数没有this指针const成员函数中的this是常量指针理解this有助于深入理解C++的面向对象机制。

weixin_48835186的博客 669
上一篇: 理解C++访问控制(private,protected,public)
下一篇: error MSB3325:无法导入以下密钥文件xxx,该密钥文件可能受密码保护
ComputerInBook
博客等级 码龄19年 1168粉丝 464原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值