求助,C++ 指向成员函数的 指针成员变量,在成员函数里赋值和调用
本帖最后由 c03xp 于 2021-7-8 11:50 编辑指针这东西太复杂了,实在不会弄,大神给个语法格式吧,感谢
#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;
}
百度了一下然后自己解决了
参考https://blog.csdn.net/qq_33154343/article/details/84141832
#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;
}
int main()
{
Pen pen = new Pen();
pen->drawline();
pen->draw();
delete pen;
return 0;
}
好像这样就行 senper 发表于 2021-7-8 17:07
int main()
{
Pen pen = new Pen();
Pen* pen = new Pen();:Dweeqw pDraw 是在哪声明的? 侃遍天下无二人 发表于 2021-7-10 00:30
pDraw 是在哪声明的?
是这一句: void (Pen::*pDraw)();
c03xp 发表于 2021-7-12 13:20
是这一句: void (Pen::*pDraw)();
哦哦,是函数指针呀,这个我不熟悉,一时没看出来,一般我都按cpp的风格直接写函数进去了 侃遍天下无二人 发表于 2021-7-12 14:22
哦哦,是函数指针呀,这个我不熟悉,一时没看出来,一般我都按cpp的风格直接写函数进去了
那就麻烦点,要弄个枚举对应每个画线、画圆的函数,调用该函数后保存当前枚举值。需要时还要用switch判断当前是什么枚举值,再调用对应的函数
页:
[1]