目前,我正在阅读《 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函数将递归调用自身。我对吗?
进行绘制或旋转等功能有哪些实际用途?

最佳答案

函数drawrotate调用结构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中的指针是如何初始化的,但是在将它们传递给全局drawrotate之前,必须对其进行初始化,以指向具有适当签名的某些函数。

09-17 19:49