首页 > 后端开发 > C++ > 正文

c++中的成员指针(pointer to member)是什么_成员指针语法与调用方式说明

尼克
发布: 2025-10-31 13:29:02
原创
232人浏览过
成员指针用于指向类的成员,需结合对象访问;声明时用类名::,通过.或->*调用,适用于动态访问成员的场景,提升代码灵活性。

c++中的成员指针(pointer to member)是什么_成员指针语法与调用方式说明

在C++中,成员指针(pointer to member)是一种特殊的指针类型,它指向类的成员(包括成员变量和成员函数),而不是普通的内存地址。由于类的成员不能脱离类对象独立存在,因此成员指针不能直接使用,必须结合具体的对象或对象指针来访问目标成员。

成员指钟的语法定义

成员指针的声明语法与普通指针不同,需要包含类名和作用域操作符::

成员变量指针:

数据类型 类名::*指针名;

例如:

立即学习C++免费学习笔记(深入)”;

class MyClass {
public:
    int x;
    double y;
};

int MyClass::*ptr = &MyClass::x; // 指向MyClass中int类型成员x的指针

成员函数指针:

返回类型 (类名::*指针名)(参数列表);

例如:

立即学习C++免费学习笔记(深入)”;

class MyClass {
public:
    void func(int a);
    double calc(double x, double y);
};

void (MyClass::*funcPtr)(int) = &MyClass::func;
double (MyClass::*calcPtr)(double, double) = &MyClass::calc;

如何调用成员指针

使用成员指针时,必须通过一个类实例(对象或对象指针)进行访问。

法语写作助手
法语写作助手

法语助手旗下的AI智能写作平台,支持语法、拼写自动纠错,一键改写、润色你的法语作文。

法语写作助手31
查看详情 法语写作助手

通过对象访问: 使用.*操作符

MyClass obj;
obj.*ptr = 100; // 设置obj.x为100
(obj.*funcPtr)(5); // 调用obj.func(5)

通过对象指针访问: 使用->*操作符

MyClass *p = &obj;
p->*ptr = 200; // 设置p所指对象的x为200
(p->*funcPtr)(10); // 调用p所指对象的func(10)

实际应用场景举例

成员指针常用于需要动态选择类成员的场景,比如实现通用的数据处理逻辑、回调机制或反射式操作。

示例:遍历多个对象并修改指定成员

#include <iostream>
using namespace std;

class Point {
public:
    double x, y;
    Point(double a=0, double b=0): x(a), y(b) {}
};

int main() {
    Point points[3] = {{1,2}, {3,4}, {5,6}};
    double Point::*coord = &Point::x; // 指向x成员

    // 批量修改所有点的x坐标
    for (int i = 0; i < 3; ++i) {
        points[i].*coord *= 2;
    }

    for (auto& p : points)
        cout << p.x << "," << p.y << endl;
    // 输出: 2,2 6,4 10,6
    return 0;
}

若将coord改为指向&Point::y,即可统一操作y坐标,提高代码灵活性。

基本上就这些。成员指针虽然不常用,但在需要泛化访问类成员的场合非常有用,理解其语法和调用方式有助于掌握更高级的C++编程技巧。

以上就是c++++中的成员指针(pointer to member)是什么_成员指针语法与调用方式说明的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号