C++:指向成员的指针运算符:. * 和->*

C++:指向类的成员的指针 引:     想必接触过C的朋友们对C语言中指针的概念已经有了深入的了解(如果初步进行了解的朋友可以看一下**C语言基础学习笔记**)。指针展开来讲的基本知识点包括:指针的概念、指针的定义和初始化及简单使用、指针函数和函数指针(有关指针函数和函数指针的内容上面的链接中也有介绍)。     不得不说,C++作为C语言的扩展,在面向对象这一主体部分处处体现着指针的思想,好比:指针和引用。之所以这么说,... 阅读详情

C++:指向成员的指针运算符:. * 和->*

语法

expression .* expression
expression ->* expression

备注

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

// expre_Expressions_with_Pointer_Member_Operators.cpp
// compile with: /EHsc
#include <iostream>

using namespace std;

class Testpm {
public:
   void m_func1() { cout << "m_func1\n"; }
   int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and
// m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
   Testpm ATestpm;
   Testpm *pTestpm = new Testpm;

// Access the member function
   (ATestpm.*pmfn)();
   (pTestpm->*pmfn)();   // Parentheses required since * binds
                        // less tightly than the function call.

// Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
   delete pTestpm;
}

Output

m_func1
m_func1
1
2

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

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

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

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

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

示例

考虑以下类和程序段:

// expre_Expressions_with_Pointer_Member_Operators2.cpp
// C2440 expected
class BaseClass {
public:
   BaseClass(); // Base class constructor.
   void Func1();
};

// Declare a pointer to member function Func1.
void (BaseClass::*pmfnFunc1)() = &BaseClass::Func1;

class Derived : public BaseClass {
public:
   Derived();  // Derived class constructor.
   void Func2();
};

// Declare a pointer to member function Func2.
void (Derived::*pmfnFunc2)() = &Derived::Func2;

int main() {
   BaseClass ABase;
   Derived ADerived;

   (ABase.*pmfnFunc1)();   // OK: defined for BaseClass.
   (ABase.*pmfnFunc2)();   // Error: cannot use base class to
                           // access pointers to members of
                           // derived classes.

   (ADerived.*pmfnFunc1)();   // OK: Derived is unambiguously
                              // derived from BaseClass.
   (ADerived.*pmfnFunc2)();   // OK: defined for Derived.
}

. * 或->* 指向成员的指针运算符的结果是在指向成员的指针的声明中指定的类型的对象或函数。 因此,在前面的示例中,表达式 ADerived.*pmfnFunc1() 的结果是指向返回 void 的函数的指针。 如果第二操作数是左值,则此结果为左值。

该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处,本文章博客地址:https://blog.youkuaiyun.com/it_cplusplus/article/details/118835508

Cadence 17.2配置CIS数据库报错?手把手解决ODBC驱动位数不匹配问题 本文详细解析了Cadence 17.2配置CIS数据库时常见的ODBC驱动位数不匹配问题,提供了从系统环境检查到分步解决方案的完整指南。重点解决32位应用程序与64位ODBC驱动之间的架构冲突,包含驱动安装、DSN配置及高级排查技巧,帮助电子工程师快速恢复设计环境。 阅读详情

相关推荐

期权定价模型系列[11]三叉树期权定价[trinomial model ]

三叉树期权定价方法简介

xiaowu1997的博客 1847

C++出现的问题总结

1.[Error] 'nullptr' was not declared in this scope。2.[Error] conversion from 'SepStack* to non-scalar type 'SepStack' requested。3.[Error] invalid use of template-name 'Node' without an argument list 。4.[Error] base operand of '- > ' has non-pointer type 'D

m0_67500944的博客 3402

立创开源:基于AD831/ADF4351的250-500MHz宽频调幅信号处理实验电路设计与实现

本文详细解析了基于AD831混频器和ADF4351本振源的250-500MHz宽频调幅信号处理实验电路的设计与实现。文章从项目需求出发,系统讲解了超外差接收架构、核心模块(包括射频前端、混频器、本振源、AGC环路及解调电路)的选型与原理,并提供了实战调试波形与性能验证,为射频电路学习者提供了从理论到实践的完整指南。

weixin_35706255的博客 227

【C语言】 浅谈指针

指针是就是地址,是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的 类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。让我们分别说明。首先,先罗列出几种常见的类型:int p;//这是一个普通的整型变量int *p;//首先从P处开始,先与*结合,所以说明P是一个指针,然后...

weixin_33694620的博客 241

易康eCognition9.0分类|规则集和机器学习的方法的面向对象的多尺度分割分类

基于易康eCognition9.0软件的规则集和机器学习的方法的面向对象的多尺度分割分类

weixin_46493028的博客 1万+

使用cubeMX生成USB HID设备

本文主要介绍如何使用stm32开发板和cubeMX生成HID设备,供参考。

专注音频,高效工作,快乐生活! 970

运算符重载之->为下标成员运算符,而不是指针

#include"aa.h" #include #include class bb { public: int i; bb() {this->i=2; } bb(int i) { this->i=i; } bb operator+(bb i) { bb a; a.i=this->i+i.i; return a ; } char * abc() {

KAIFAWORD的专栏 745

手把手教你用ES8311芯片搞定智能音箱TTS播放(附完整寄存器配置清单)

本文详细介绍了如何使用ES8311音频编解码芯片实现智能音箱TTS播放功能,包括芯片特性、硬件连接、寄存器配置及调试技巧。通过完整的寄存器配置清单和实战经验,帮助开发者快速掌握ES8311在智能音箱中的应用,优化音频输出质量和低功耗设计。

weixin_42567497的博客 558

【C语言:报错:运算符 -> 或 ->* 应用于 而不是指针类型(求指点)

【代码】【C语言:报错:运算符 -> 或 ->* 应用于 而不是指针类型。

2401_82494330的博客 783

131、高通骁龙影像平台总览:Spectra ISP 各代架构演进与特性对比

摘要:本文深入分析了高通骁龙Spectra ISP从250到780代的架构演进与技术痛点,揭示了各代关键改进与隐藏问题。重点剖析了双ISP带宽分配、AI ISP黑盒决策、温度控制等实战问题,并给出具体解决方案(如寄存器配置、QoS调整等)。文章强调工程师需平衡带宽、功耗与画质的三角关系,建议调试时先关闭AI模块建立基线,关注统计引擎配置,并建立温度监控机制。最后指出理解架构局限比追求完美设计更重要,需要针对不同场景找到合适的妥协方案。(148字)

sundong_81的博客 207

世界模型(World Models)进展全景调研(截至 2025-08)

A5) 2019-07(待核验) | C-SWM:Contrastive Structured World Models(Kipf et al.)A6) 2019-07(待核验) | SLAC:Stochastic Latent Actor-Critic(Lee et al.)A3) 2015-12(背景注记,待核验) | Embed to Control(E2C,Watter et al.)Nature 2020)Repro/Code:werner-duvaud/muzero-general(社区)

u013250861的博客 488

C++的运算符(九)—— .* , ->*(成员指针运算符)

目录文章:C++中运算符的优先级   成员指针是什么?是指向一个类中某个成员的指针。注意是直接指向,不是通过某个对象指向的。 如果要定义一个成员指针,用这样的语法: class cl{ public: int mint; double get_mint(float adder){ return mint+adder; } }; int cl...

zgq的博客 8326

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

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

C++中的成员访问运算符和指针到成员运算符

指向成员的指针运算符 .* 或 –>* 的结果是在指向成员的指针的声明中指定的类型的对象或函数。在包含 .* 运算符的表达式中,第一操作数必须是类类型且可访问,而指向第二操作数中指定的成员的指针或可访问类型的成员的指针明确从该类派生并且可供该类访问。在包含 –>* 运算符的表达方式中,第一操作数必须是第二操作数中指定的类型的“指向类类型的指针”或明确地从该类派生的类型。二元运算符 –>* 将其第一操作数(必须是指向类类型的对象的指针)与其第二操作数(必须是指向成员的指针类型)组合在一起。

raoxiaoz0425的博客 240

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

详解C++中的成员访问运算符和指针到成员运算符

指向成员的指针运算符 .* 或 –>* 的结果是在指向成员的指针的声明中指定的类型的对象或函数。在包含 .* 运算符的表达式中,第一操作数必须是类类型且可访问,而指向第二操作数中指定的成员的指针或可访问类型的成员的指针明确从该类派生并且可供该类访问。在包含 –>* 运算符的表达方式中,第一操作数必须是第二操作数中指定的类型的“指向类类型的指针”或明确地从该类派生的类型。二元运算符 –>* 将其第一操作数(必须是指向类类型的对象的指针)与其第二操作数(必须是指向成员的指针类型)组合在一起。

m0_74824865的博客 155

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

c++ 成员访问

 Member Access Operators: . and -&gt;  值==》   【.】地址==》【-&gt;】postfix-expression   . member  (&amp;e)-&gt;member  === e.member  (e is a class or struct)In the first form, postfix-expression represents ...

jerryzfc的专栏 470

C++ | 指向类成员变量的指针 ( .* 运算符 与 ->* 运算符)

文章目录指针访问类成员变量1. 指针访问类中普通变量2. 指针访问类中静态变量指针访问类成员方法1. 指针访问类中普通方法2. 指针访问类中静态方法 我们都知道在 C/C++ 中指针的使用的方式非常灵活,在C语言中指针可以指向任意的变量或是函数,并通过指针解引用的方式对其访问。 而在C++中我们引入了OOP的思想,并且产生了类这种结构,其中封装作为类的一大特性将变量和方法封装在类内部使得我们直接无法使用,而作为类实例化存在的对象成为了间接调用类内部属性和方法的载体(通过对象的this指针间接调用,需要注意

专注于C/C++/Linux领域创作 7740

C++指向对象成员函数的指针

指向对象成员函数的指针 对象的成员函数是一个函数,那么,我们可以定义一个函数指针,指向对象的成员函数。但是,该函数指针变量的定义,与普通的函数指针变量定义不同。 首先,我们先看看指向“普通函数”的指针变量的定义方法: 数据类型名 (* 指针变量名)(参数列表); 例如: void (*pf)(int); //定义函数指针pf,指向的函数是带有1个int类型的参数,并且,返回类型是void 所以,它可以指向一个函数,并通过函数指针调用该函数,如下: pf = func;...

LC的专栏 3507

成员指针运算符 .* 和 ->*

转载:http://www.groad.net/bbs/thread-5548-1-1.html        觉得很不错也很重要 有一种特殊的指针叫做成员指针,它们通常指向一个类的成员,而不是对象中成员的特定实例。 成员指针并不是真正的指针,它只是成员在对象中的偏移量,它们分别是:.* 和 ->* 。 下面例子说明了成员指针 .* 的用法: #include "std

xiaokuang5020的专栏 1598

让我们看看C++类中的默认成员函数到底是什么?(外加常量指针和指向常量指针的区别)

默认成员函数:就是即使类内什么都不写(就像之前我们在类对象的大小那里说的空类),编译器也会自动生成6个默认的成员函数,这6个成员函数称为默认成员函数。

2302_77620024的博客 3965

指向成员的指针运算符 .* 与 ->* 的区别

指向成员的指针运算符 .*  与 -&gt;*  的区别 目录 指向成员的指针运算符 .*  与 -&gt;*  的区别 [1]  成员指针访问运算符 .* [2]  成员指针访问运算符 -&gt;* 运行结果: 其中补充说明一点: 总结: [1]  成员指针访问运算符 .* 先来一个类STUDENT,注意其中将要表演的fun()函数要是共有的,不然后面不能够进行访问(私有成员函...

1万+

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

C++编程:指向类成员的指针

ComputerInBook的专栏 547

C++类成员指针

类成员指针

随手写下笔记和感悟 2295

指向运算符与成员运算符的区别

 成员运算符.与指向运算符->的区别 1、当使用成员运算符的时候,定义普通的变量,同样在C++中就 是定义类的普通对象,然后就可以用成员运算符访问变量或者 对象的数据成员和成员函数。    struct   Student       {       int   a;       }stu1;//stu1是一个变量  使用时候可以直接进行访问 stu1.a;使用的

muzhiai的专栏 4795

C++中指向成员的指针运算符(.* 和 ->*)用法说明

本人介绍了C++中指向成员的指针运算符(.*和->*)的使用方法

_Santiago的博客 1779

指向类的成员的指针

指向类的成员的指针    在C++中,可以说明指向类的数据成员和成员函数的指针。    指向数据成员的指针格式如下:    ::*    指向成员函数的指针格式如下:    (::*)()    例如,设有如下一个类A:    class A    {    public:        int fun (int b) { return a*c+b; }        A(int i) { a=i

qhmao的专栏 4298

指向类成员的指针

指向类成员的指针总的来讲可以分为两大类四小类(指向数据成员还是成员函数,指向普通成员还是静态成员),下面一一做介绍: 一、指向类的普通成员的指针(非静态) 1、指向类成员函数的指针 简单的讲,指向类成员函数的指针与普通函数指针的区别在于,前者不仅要匹配函数的参数类型和个数以及返回值类型,还要匹配该函数指针所属的类类型。总结一下,比较以下几点: a)参数类型和个数 b)返回值类型 c)所属的类类型(特别之处) 究其原因,是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象

xiaozhidian的博客 1682
上一篇: C++:二进制求补运算符:~
下一篇: C++:后缀增量和减量运算符:++ 和 --
「已注销」
博客等级 码龄5年 27粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值