//父类
typedef struct
{
long width;
long height;
void (*paint)(void *_this);
}
WINDOW;
//子类
typedef struct
{
WINDOWbase; //继承于WINDOW类
void (*OnClick)(void *_this);
}
BUTTON;
int main(int argc,char **argv)
{
BUTTON button;
//间接调用父类成员
button.base.paint(&button.base);
//强制类型转换后直接访问父类成员
((WINDOW)button).paint(&button);
return 0;
}
中心思想就是在子结构体的起始处包含一个父结构体成员,必须要放在起始处,才可以实现强制类型转换,原因你应该一想就明白~~ 如果nisy在例子中将指针使用去掉,更易于初学者理解,并且这个例子并不是必须用指针指向!
页:
1
[2]