当前位置: 首页 > wzjs >正文

线上推广公司排名seo搜索引擎实战详解

线上推广公司排名,seo搜索引擎实战详解,曲阜网站建设哪家好,住房城乡建设部一、成员函数指针的本质 与普通函数指针的区别: // 普通函数指针 void (*funcPtr)() &普通函数;// 成员函数指针 void (MyClass::*memberFuncPtr)() &MyClass::成员函数;• 绑定对象:成员函数指针必须与类的实例对象结合使用 • 隐含 this 指…

一、成员函数指针的本质

与普通函数指针的区别

// 普通函数指针
void (*funcPtr)() = &普通函数;// 成员函数指针
void (MyClass::*memberFuncPtr)() = &MyClass::成员函数;

绑定对象:成员函数指针必须与类的实例对象结合使用
隐含 this 指针:成员函数指针内部隐含了访问对象成员数据的上下文


二、完整语法解析

声明格式
返回类型 (类名::*指针变量名)(参数列表) [const];

示例 1:无参函数

void (Teacher::*teachSignal)() = &Teacher::hungry;

示例 2:带参数的函数

void (Student::*studySlot)(int hours) = &Student::learn;

示例 3:const 成员函数

QString (DataModel::*getData)() const = &DataModel::data;

三、核心使用场景

1. Qt 信号槽连接(Qt5+ 风格)
QObject::connect(sender对象指针, &发送者类::信号,  // 这里本质是成员函数指针receiver对象指针, &接收者类::槽函数
);

优势
• 编译时类型检查
• 自动参数类型匹配
• 不需要 SIGNAL()/SLOT()

2. 实现回调机制
class Button {
public:void onClick(void (User::*handler)()) {// 保存回调函数指针m_handler = handler;}void trigger(User* user) {(user->*m_handler)(); // 通过对象调用成员函数}private:void (User::*m_handler)();
};

四、操作成员函数指针

赋值与调用
class Calculator {
public:double add(double a, double b) { return a + b; }double mul(double a, double b) { return a * b; }
};// 定义成员函数指针类型
using MathOp = double (Calculator::*)(double, double);int main() {Calculator calc;// 赋值不同操作MathOp operation = &Calculator::add;double result = (calc.*operation)(3, 4); // 输出 7.0operation = &Calculator::mul;result = (calc.*operation)(3, 4); // 输出 12.0
}
在数据结构中使用
#include <map>class AudioPlayer {
public:void play() { /*...*/ }void pause() { /*...*/ }void stop() { /*...*/ }
};std::map<int, void (AudioPlayer::*)()> controlMap {{1, &AudioPlayer::play},{2, &AudioPlayer::pause},{3, &AudioPlayer::stop}
};// 使用示例
AudioPlayer player;
(player.*controlMap[1])(); // 执行 play()

五、特殊注意事项

1. 继承关系处理
class Base {
public:virtual void foo() { cout << "Base"; }
};class Derived : public Base {
public:void foo() override { cout << "Derived"; }
};// 成员函数指针支持多态
void (Base::*funcPtr)() = &Base::foo;
Derived obj;
(obj.*funcPtr)(); // 输出 "Derived"
2. 静态成员函数
class Logger {
public:static void writeLog() { /*...*/ } 
};// 静态成员函数使用普通函数指针
void (*logFunc)() = &Logger::writeLog;
3. 现代 C++ 的改进

使用 auto 简化声明:

auto funcPtr = &MyClass::memberFunction; // 自动推导类型

六、底层原理(扩展知识)

成员函数指针在内存中实际存储的是:
• 函数在类中的偏移量
• 虚函数表索引(如果是虚函数)
• 调整 this 指针的偏移量(多重继承时)

这种实现方式使得成员函数指针比普通函数指针占用更多内存(通常 2-3 个机器字长),具体细节由编译器实现决定。


七、Qt 中的典型应用

信号/槽参数匹配规则
// 参数类型必须严格匹配
void (Sender::*signal)(int) = &Sender::valueChanged;
void (Receiver::*slot)(int) = &Receiver::updateValue;QObject::connect(sender, signal, receiver, slot); // 正确// 以下会导致编译错误
void (Receiver::*wrongSlot)(QString) = &Receiver::wrongUpdate;
QObject::connect(sender, signal, receiver, wrongSlot); // 错误!参数类型不匹配

通过深入理解成员函数指针,可以更好地掌握 Qt 的信号槽机制以及 C++ 的面向对象特性。这种指针类型虽然语法略显复杂,但为类型安全的高阶抽象提供了坚实基础。

http://www.dtcms.com/wzjs/307263.html

相关文章:

  • 0基础学app程序开发厉害的seo顾问
  • 做愛的网站動漫东莞营销外包公司
  • 国内禁用的国外网站sem优化技巧
  • 时时彩票网站如何做技师培训
  • 长春做网站价格昆山网站制作公司
  • 扫描到网站目录然后怎么做网页快照
  • pc端和移动端的网站区别是什么意思核心关键词是什么意思
  • 企业可以在哪些网站做免费宣传it培训课程
  • 宝安做网站的郑州网站优化渠道
  • 51zwd一起做网站搜索大全引擎入口
  • 健身网站怎么做怎么样才可以在百度上打广告
  • 广东网站建设报价官网网络营销成功案例分析其成功原因
  • 网站的站内结构锚文本是如何做的宁波seo在线优化
  • 肇庆网站建设百度免费推广方法
  • 网站建设资讯站怎么发帖子做推广
  • 软件外包公司怎么找业务什么是seo搜索优化
  • 官方网站怎么找怎么注册网站免费的
  • 怎么建设网站赚钱手机郑州seo优化顾问阿亮
  • 开发app费用seo关键字优化教程
  • 公司网站开发国内外现状百度云盘资源
  • 什么外贸网站做箱包好在线外链发布工具
  • 网站建设技巧发新闻稿平台
  • 软件开发工具是什么意思搜索引擎优化的缺点包括
  • 南昌网站优化公司官网设计比较好看的网站
  • 汽车行业网站怎么做中国十大企业培训机构排名
  • 做网站充值犯法吗百度资源搜索
  • 科普类网站怎么做自己建网站详细流程
  • 微转app是用网站做的吗seo中文含义
  • 做海外正品代购的十个网站_东莞网络推广系统
  • 个人简约网站模板免费下载百度关键词优化专家