目前,我正在阅读《 Stroustrup编程:原理与实践C++》。我面对这个例子:
typedef void (*Pfct0)(struct Shape2*);
typedef void (*Pfct1int)(struct Shape2*,int);
struct Shape2{
Pfct0 draw;
Pfct1int rotate;
};
void draw(struct Shape2* p)
{
(p->draw)(p);
}
void rotate(struct Shape2* p,int d)
{
(p->rotate)(p,d);
}
int f(struct Shape2* pp)
{
draw(pp);
return 0;
}
我无法获得绘制和旋转功能的实际作用。
我知道什么是typedef,函数指针,->运算符。
据我了解,p-> draw函数将递归调用自身。我对吗?
进行绘制或旋转等功能有哪些实际用途?
最佳答案
函数draw
和rotate
调用结构p
成员指向的函数,并在指向该结构p
的指针上调用这些函数。
也许这会有所帮助:
typedef void (*pointer_to_function)(struct Shape2*);
struct Shape2{
pointer_to_function draw;
Pfct1int rotate;
};
void function(struct Shape2* p)
{
(p->draw)(p);
^^^^^^^^^
// this is pointer_to_function so call the function pointed to by it
// with some argument of type struct Shape2*, in example p itself, why not
}
此代码段中的误导性是,我们看不到对象Shape2中的指针是如何初始化的,但是在将它们传递给全局
draw
和rotate
之前,必须对其进行初始化,以指向具有适当签名的某些函数。