吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1485|回复: 8
收起左侧

[求助] 求助,C++ 指向成员函数的 指针成员变量,在成员函数里赋值和调用

[复制链接]
c03xp 发表于 2021-7-8 11:47
本帖最后由 c03xp 于 2021-7-8 11:50 编辑

指针这东西太复杂了,实在不会弄,大神给个语法格式吧,感谢

[C++] 纯文本查看 复制代码
#include <stdio.h>

class Pen {
public:
        void drawline();
        void drawcircle();
        void draw();
        void (Pen::*pDraw)();
};

void Pen::drawline() {
        printf("draw line\n");
        pDraw = &drawline;        //随便写的语法,只是为了表达我想实现的语义,这里用pDraw保存刚刚调用过的函数
        
}

void Pen::drawcircle() {
        printf("draw circle\n");
pDraw = &drawcircle; //同上
}

void Pen::draw() {
        printf("drawing...\n");
        pDraw();        //随便写的语法,报错
}


int main()
{
        Pen pen;
        pen.drawline();
        pen.draw();
    return 0;
}


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

头像被屏蔽
石昊荒天帝 发表于 2021-7-8 12:29
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| c03xp 发表于 2021-7-8 13:07
百度了一下然后自己解决了

参考https://blog.csdn.net/qq_33154343/article/details/84141832


[C++] 纯文本查看 复制代码
#include <stdio.h>

class Pen {
public:
	void drawline();
	void drawcircle();
	void draw();
	void (Pen::*pDraw)();
};

void Pen::drawline() {
	printf("draw line\n");
	pDraw = &Pen::drawline;
	
}

void Pen::drawcircle() {
	printf("draw circle\n");
	pDraw = &Pen::drawcircle;
}

void Pen::draw() {
	printf("drawing...\n");
	(this->*pDraw)();
}


int main()
{
	Pen pen;
	pen.drawline();
	pen.draw();
    return 0;
}
senper 发表于 2021-7-8 17:07
int main()
{
        Pen pen = new Pen();
        pen->drawline();
        pen->draw();
        delete pen;
    return 0;
}
好像这样就行

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
c03xp + 1 + 1 我很赞同!

查看全部评分

 楼主| c03xp 发表于 2021-7-9 09:04
senper 发表于 2021-7-8 17:07
int main()
{
        Pen pen = new Pen();

Pen* pen = new Pen();
侃遍天下无二人 发表于 2021-7-10 00:30
pDraw 是在哪声明的?
 楼主| c03xp 发表于 2021-7-12 13:20

是这一句:   void (Pen::*pDraw)();
侃遍天下无二人 发表于 2021-7-12 14:22
c03xp 发表于 2021-7-12 13:20
是这一句:   void (Pen::*pDraw)();

哦哦,是函数指针呀,这个我不熟悉,一时没看出来,一般我都按cpp的风格直接写函数进去了
 楼主| c03xp 发表于 2021-7-12 16:48
侃遍天下无二人 发表于 2021-7-12 14:22
哦哦,是函数指针呀,这个我不熟悉,一时没看出来,一般我都按cpp的风格直接写函数进去了

那就麻烦点,要弄个枚举对应每个画线、画圆的函数,调用该函数后保存当前枚举值。需要时还要用switch判断当前是什么枚举值,再调用对应的函数
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 00:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表