首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++中的指针成员 - >*和.*运算符是什么?

在C++中,指针成员运算符"->"和" ." 是用于访问指向类对象的指针成员的运算符。它们分别用于间接引用指针和引用类对象的成员。

  1. "->*" 运算符:

当使用 "->*" 运算符时,左侧操作数是一个指向类对象的指针,右侧操作数是一个指向成员函数的指针。运算符的作用是通过指针调用指向的成员函数。例如:

代码语言:cpp
复制
class MyClass {
public:
    void myFunction() {
        // 函数实现
    }
};

int main() {
    MyClass obj;
    MyClass* pObj = &obj;
    void (MyClass::*pFunc)() = &MyClass::myFunction;

    (pObj->*pFunc)(); // 使用指针调用成员函数
    return 0;
}
  1. ".*" 运算符:

当使用 " .*" 运算符时,左侧操作数是一个类对象的引用,右侧操作数是一个指向成员函数的指针。运算符的作用是通过引用调用指向的成员函数。例如:

代码语言:cpp
复制
class MyClass {
public:
    void myFunction() {
        // 函数实现
    }
};

int main() {
    MyClass obj;
    MyClass* pObj = &obj;
    void (MyClass::*pFunc)() = &MyClass::myFunction;

    (obj.*pFunc)(); // 使用引用调用成员函数
    return 0;
}

这两种运算符在C++中非常重要,尤其是在面向对象编程中。它们允许我们访问和调用类对象的成员,包括成员变量和成员函数。

推荐的腾讯云相关产品:

  • 腾讯云云服务器:提供可扩展的计算能力,支持多种操作系统和开发环境。
  • 腾讯云对象存储:提供可靠的数据存储和管理服务,支持海量数据的高效存储和访问。
  • 腾讯云数据库:提供可靠的数据库服务,支持多种数据库类型,包括关系型数据库和非关系型数据库。

产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C++const成员变量成员函数

在类,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量成员函数。...const成员变量 const 成员变量用法普通 const 变量用法相似,只需要在声明时加上 const 关键字。...初始化 const 成员变量只有一种方法,就是通过构造函数初始化列表,这点在前面已经讲到了,请猛击《C++初始化列表》回顾。...const成员函数(常成员函数) const 成员函数可以使用类所有成员变量,但是不能修改它们值,这种措施主要还是为了保护数据而设置。const 成员函数也称为常成员函数。...需要强调是,必须在成员函数声明定义处同时加上 const 关键字。

25830

C++C++ this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

一、常量成员函数 1、const 修饰成员函数分析 在 C++ , 普通非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类 , 定义了 void fun(int..., 其本质是修饰 第一个参数 Student* pThis 指针指向内存空间 指针本身 ; 将 void fun(int age, int height) const 转换为 C 语言代码为...函数 第一个参数 Student* pThis 指针指向内存空间 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int age...fun 函数 第一个参数 Student* pThis 指针指向内存空间 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int...fun 函数 第一个参数 Student* pThis 指针指向内存空间 指针本身 // // C++ 编译器会将该函数转为 Student_fun(Student* pThis, int

20420
  • C++this指针理解用法

    对于一个类实例来说, 你可以看到它成员函数、成员变量, 但是实例本身呢? this是一个指针,它时时刻刻指向你这个实例本身。...,通过该地址可以访问内部成员函数成员变量。...在非静态成员函数,编译器在编译时候加上this作为隐含形参,通过this来访问各个成员(即使你没有写上this指针)。...例如a.fun(1)fun(&a,1) this使用:1)在类非静态成员函数返回对象本身时候,直接用return *this(常用于操作符重载赋值、拷贝等函数)。...,即将point1对象地址传递给了this指针 b.编译器编译后原型应该是void MovePoint(Point *this, int a, int b) c.在函数体可以写成{this->x

    66330

    C++ extern 数组指针

    在一次使用 extern 声明全局变量过程,因为数组指针混用引发了错误。 我们知道,C++ 中使用 extern 来声明在其他(未使用 include 包含)文件全局变量。...关于这段话理解,我觉得引入编译知识比较好理解,数组名是一个符号,枚举符号一样,有其自身值,数组名值就是数组首地址。在编译过程,这些符号常亮会被替换为地址符号。...而指针是一个普通变量,变量值存放是数组地址。虽然数组名指针都可以进行元素访问,但是其本质是有很大区别的!...`char a[]`  `a` 是常量,是一个地址,`char *a`  `a` 是一个变量,一个可以存放地址变量。...这里问题就出现了:由于在这个文件声明 a 是一个指针变量而不是数组,链接器行为实际上是把指针 a 自身地址定位到了另一个 .c 文件定义数组首地址之上,而不是我们所希望把数组首地址赋予指针

    41500

    详解c++指针指针指针引用

    展示一下使用指针指针指针引用修改传递给方法指针,以便更好使用它。...(这里说指针指针不是一个二维数组) 为什么需要使用它们 当我们把一个指针做为参数传一个方法时,其实是把指针复本传递给了方法,也可以说传递指针指针值传递。...如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改指针copy而不是指针本身,原来指针还保留着原来 值。...输出是两个2 使用指针指针 展示一下使用指针指针做为参数 void func(int **p) { *p = &m_value; // 也可以根据你需求分配内存 *p...我们看一下 func(int **p)这个方法 p:  是一个指针指针,在这里我们不会去对它做修改,否则会丢失这个指针指向指针地址 *p:  是被指向指针,是一个地址。

    1.3K60

    C++C++ this 指针用法 ① ( C++ this 指针引入 | this 指针用法 | 代码示例 )

    一、C++ this 指针 1、C++ this 指针引入 在 C++ , this 指针 是一个特殊指针 , 由系统自动生成 , 不需要手动声明定义 , 在类每个 非静态成员函数..., 因此 this 指针是类内部使用指针 , 使用 this 可以访问 实例对象 所有 公有 public / 保护 protected / 私有 private 成员 ; 2、C++...this 指针用法 C++ this 指针用法 : 使用 this 作为指针 : 在 非静态成员函数 , 直接使用 this 作为 本实例对象 指针 ; this 使用 this-> 访问成员变量...访问成员变量 : 在 非静态成员函数 , 直接使用如下语法 , 访问 本实例对象 非静态成员变量 ; 先获取指针指向数据 然后访问数据成员变量 ; (*this).成员变量名 在 C++...成员变量 ; 在下面的代码 , 参数名称也是 age height , 与 成员变量名称重名了 , 使用 this 指针可以有效区分 函数参数 与 成员变量 重名问题 ; 使用 代码 this

    29220

    C++对象以及成员函数

    参考链接: 如何通过C++函数传递返回对象? 一个实体拥有自己属性行为,属性是私有的,行为是共有的,在C++实体对应就是对象,实体抽象数据类型就是类,属性是成员变量,行为是成员函数。 ...在C++,结构体默认是全部都可见,而类默认是私有的。 ...C++classC语言结构体区别:  ①struct Node是一个类型,在C语言中这样定义struct Node a;定义了一个结构体类型a变量;在C++,结构体定义对象可以写成Node...所以我们在进行函数设计时候,应尽量避免返回成员变量指针,修改到成员变量值导致程序bug。 ...那么类定义类外定义有什么区别呢??  ①如果在类定义,在函数调用时候编译器会当做内联函数处理,在调用点将代码展开;  ②如果在类外定义,在函数调用时普通函数一样,进行栈桢开辟回退。

    1.3K20

    浅析C++this指针

    ,虽然编译器会给这两个函数传递this指针,但是它们并没有通过this指针来访问类成员变量,因此call 2call 3两行代码可以正确调用;而对于成员函数Test4()要访问类成员变量,因此要使用...看call 3那行C++代码汇编代码就可以看到this指针跟一般函数参数区别:一般函数参数是直接压入栈(push 0Dh),而this指针却被放到了ecx寄存器。...在类成员函数如果要用到类成员变量,就可以通过访问ecx寄存器来得到指向对象this指针,然后再通过this指针加上成员变量偏移量来找到相应成员变量。...因此这一行就是给成员变量m_iValue2赋值。 通过上面的分析,我们可以从底层了解了C++this指针实现方法。...虽然不同编译器会使用不同处理方法,但是C++编译器必须遵守C++标准,因此对于this指针实现应该都是差不多

    75010

    C++this指针本质

    一直以来对C++this不理解,只知道在构造函数,如果构造函数参数成员名字一样的话,就可以用this指针来区分,如: this->a = a; 一直以来都有这个疑问:this究竟是什么?...从刚才代码,我们用”this->”而不是”this.”就说明this是一个指针,而我们知道,在C、C++指针就是地址,因此很容易想到,this也是一个地址。但是问题来了,this是谁地址呢?...我们看下面这个很简单C++程序: #include class A { public: A(); }; A::A() { std::cout << "this...::endl; } int main() { A a; std::cout << "&a " << &a << std::endl; return 0; } 大家先在自己脑袋运行一下这个程序...我们可以看到,this&a结果是一样。由此可以看出,this就是a地址,而a是类A一个对象,占用了sizeof(A)内存空间。

    75130

    c++系列之二 指向成员函数指针(烧脑)

    如果对翻译君翻译质量有意见,建议前往 原地址 围观。 咦?还不走?那废话少说,我们开始了啊。 关于成员函数指针 成员函数指针C++最少用到语法之一,甚至有经验C++码农有时候也会被它搞晕。...除了它其它成员共享命名空间Foo(在我们例子命名空间是 Foo:: )之外,它常规全局函数是一样。...所以,静态成员函数不是类一部分,成员函数指针语法对常规函数指针并不成立,例如上面例子静态成员函数指针。...这个例子证明了成员函数指针不是常规指针。另外,为什么C++如此费心地去发明这样语法?很简单,因为它常规指针是不同东西,而且这样类型转换也是违反直觉。...上述代码字符串来源是两个字符串常量"Strings ""concatenated!",而成员函数指针数组被用来根据菜单选项执行相应打印动作。

    3K20

    C++成员函数重载二元一元运算符

    重载双目运算符时,运算符函数应该具有两个参数,若运算符函数作为类成员函数(当运算符重载函数作为类成员函数时,要求操作数左边必须是一个对象,而函数参数可以是同类对象也可以是普通变量),则只需要一个参数...双目运算符 双目运算符就是具有两个操作数运算符。如 +、-、==等。 对双目运算符而言,成员函数重载运算符函数参数表只有一个参数,而用友元函数重载运算符函数参数表中含有两个参数。...成员函数重载 == 、>运算符: bool operator==(CTime& time); bool operator>(CTime& time); //判断对象每个成员变量是否相等...if (m_nMinute < time.m_nMinute) { return false; } else //这是两个对象时钟分钟相等情况下...,返回false } 成员函数重载++运算符 CTime operator++();//前置++ CTime operator++(int);//后置++,这个int类型参数只是为了区分

    52420

    C++this指针,静态成员,友元函数友元类

    ---- 1. this指针 在上篇讲C++类,对象,封装,继承(派生),多态时候,this指针出现在成员函数,并使用->成员提取符操作成员变量。...在 C++ ,每一个对象都能通过 this 指针来访问自己地址,this 指针是所有成员函数隐含参数,实际上成员函数默认第一个参数为T* const register this,this指针成员函数开始执行前构造...,它可以用来指向调用对象,并且只可以在成员函数调用,对于全局函数,静态函数,友元函数,都不能使用this指针。...静态数据成员普通数据成员一样遵从public,protected,private访问规则。 相对于类成员,必须在构造对象以后才会分配内存空间,只能通过对象名访问。...友元函数友元类 所谓友元函数,就是在类,用friend关键字声明一个函数,这个函数声明在类,但不作为类成员函数,虽然友元函数不属于成员函数,却可以访问类成员,不论成员是public,pirvate

    1.5K10

    VCGCC成员函数指针实现研究(二)

    、接上一篇 VCGCC内成员函数指针实现研究(一) 接下来是多重继承,用到测试代码如下所示: #include #include #include <algorithm...*ptr)(); return 0; } VC多重继承成员函数指针实现 image.png 图八:VC多重继承指针赋值操作 赋值部分单继承是一样。...GCC多重继承成员函数指针实现 image.png 图十二:GCC多重继承函数指针赋值 哈,GCC多重继承赋值部分也单继承一样,那么调用呢?...image.png 图十三:GCC多重继承函数指针调用 如上图所示,比单继承多了两行,第一行是调整虚表地址到foo_b,这点VC一样。后面增加add指令是调整成员函数this指针地址。...下一篇 VCGCC成员函数指针实现研究(三)

    68820

    C++指针用法汇集

    1、指向对象指针   定义:对象空间起始地址就是对象指针。   ...说明:在建立对象时,编译系统就为每个对象分配一定存储空间以存放其成员,不过注意,在一般情况下不同对象数据存储单元存放数据成员是不相同,而不同对象函数代码却是相同,也就是说,它们函数代码是共享...定义指向类对象指针变量一般形式是:   类名 *对象指针名;   如对于与个Time类对象,我们可以有: Time t; Time *p; p=&t;   我们就可以通过对象指针访问对象对象成员...,假如所定义类中有数据成员hour、minute、sec,成员函数有gettime(),则 (*p).hour 即为p指向对象hour成员,相当于t.hour (*p).gettime() 即为p...指向对象成员函数gettime(),相当于t.gettime()   也可以用如下形式: p->hour p->gettime()上面是等价

    12910

    C++ 指针引用区别

    指针是C系语言一大特色,也在很大程度上体现着C/C++精髓,一个数据对象内存地址称为该数据对象指针。...引用是C++对C语言一个补充,它作用是为一个变量起一个别名。...这个问题上面的其实是对应,既然指针在定义时候可以为空,但是一个为空指针对实现一个功能是没有用,为了代码鲁棒性,我们必须时刻考虑指针为空情况,这在指针作为函数参数时尤为常见。...由于引用声明初始化总是在一起,所以不可能让一个对象引用指向另一个,这完全没有道理,假设a引用是c,那么在执行int &c=b;就重定义了,如果执行c = b;,那么只是把b值赋值给c,也就是...endl; cout<<a<<endl; c = b; p = &b; cout<<c<<endl; cout<<a<<endl; (4)应用区别: 以上特性决定了指针引用一些应用上区别

    97980

    C++ 指针句柄区别

    指针是一个变量,其值为另一个变量地址,即,内存位置直接地址,指针对应着一个数据在内存地址,得到了指针就可以自由地修改该数据。...句柄实际上是一种指向某种资源指针,或者说是一种指向指针指针。...在windows系统内存管理一般会将当前处于空闲状态对象内存释放掉,当需要访问时候再重新提交分配物理内存,从而导致对象物理地址是变化, 这样就不允许系统直接通过指针来访问(物理地址不断变化...所以windows 提供了专门设计了句柄为了解决指针指向对象内存地址不断变化,由句柄来指向当前对象指针。...句柄(稳定)----->记载着对象在内存地址---->对象在内存地址(不稳定)---->记载着实际对象地址。 ?

    2.5K30
    领券