首先:设计一个方法来输出方形和圆形的面积
1.设计一个函数指针
2.表示形状的结构体
3.表示圆形和方形的结构体
4.计算面积
typedef struct _ops
{
float (*area)(void*); //面积
}Ops;
//代表形状的结构体
typedef struct _Shape
{
Ops ops; //形状
}Shape;
typedef struct _Square
{
Shape shape; //保留形状
float length;
}Square;
typedef struct Ciccle
{
Shape shape;
float r;
}Circle;
//计算面积
float sq_area(void* thisz)
{
if (thisz == NULL)
{
return -1;
}
printf("Square area:\n");
Square* sp = (Square*)thisz;
float area = sp->length * sp->length;
return area;
}
float Cir_area(void* thisz)
{
if (thisz == NULL)
{
return -1;
}
printf("Square area:\n");
Circle * cir = (Circle*)thisz;
float area = cir->r*cir->r*PI;
return area;
}
原理:设计一盒函数指针,代表形状的结构体,方形和圆形的结构体,分别计算面积。
将对应的函数赋值给对应的函数指针,再利用形状指针指向圆形和方形结构体的地址,实现动态联编
int main()
{
Square square;
memset(&square, 0, sizeof(Square));
square.length = 10;
//形状结构体中的函数指针中的面积指针指向计算出来的面积
square.shape.ops.area = sq_area;
Circle circle;
memset(&circle, 0, sizeof(Circle));
circle.r = 5;
circle.shape.ops.area = Cir_area;
Shape *shape = NULL;
shape = (Shape*)□
cout << shape->ops.area(&square) << endl;
shape = (Shape*)&circle;
cout << shape->ops.area(&circle) << endl;
}