序言
作为一个自动化专业毕业的年轻小伙,自己的编程水平有限,需要广泛学习训练。特此记录下自己编程学习代码。非科班毕业,没有严格考量时间和空间的复杂度。
学习当然是学习了别人的思想然后内化的呀。
源码
Point.h
#ifndef POINT_H
#define POINT_H
#include <stdio.h>
#include <malloc.h>
#define ERR_VAL -1
struct Point
{
double x; //point的属性域
double y; //point的属性域
void (*SetPoint)(struct Point *,double,double); //point的方法域
double (*GetX)(struct Point *); //point的方法域
double (*GetY)(struct Point *); //point的方法域
};
//供用户使用的对象定义
typedef struct Point *point;
//供用户使用的对象构造函数
struct Point *Point(double x,double y);
//供用户使用的对象析构函数
void DestroyPoint(struct Point *);
#endif
Point.c
#include "Point.h"
//供对象使用的方法函数
static void SetPoint(struct Point *p,double x,double y)
{
if (p == NULL)
{
return;
}
p->x = x;
p->y = y;
}
//供对象使用的方法函数
static double GetX(struct Point *p)
{
if (p == NULL)
{
return(ERR_VAL);
}
return(p->x);
}
//供对象使用的方法函数
static double GetY(struct Point *p)
{
if (p == NULL)
{
return(ERR_VAL);
}
return(p->y);
}
//供用户使用的对象构造函数
struct Point *Point(double x,double y)
{
struct Point *pRet;
pRet = (struct Point *)malloc(sizeof(struct Point));
//属性域赋值
pRet->x = x;
pRet->y = y;
//方法域赋值(注册方法)
pRet->SetPoint = SetPoint;
pRet->GetX = GetX;
pRet->GetY = GetY;
return(pRet);
}
//供用户使用的对象析构函数
void DestroyPoint(struct Point *p)
{
if (p == NULL)
{
return;
}
free(p);
p = NULL;
}
main.c(测试用)
#include "Point.h"
int main(void)
{
point p = Point(3.0,4.0);
double x,y;
x = p->GetX(p);
y = p->GetY(p);
printf("x of point : %lf\n",x);
printf("y of point : %lf\n",y);
p->SetPoint(p,5.0,10.0);
x = p->GetX(p);
y = p->GetY(p);
printf("x of point : %lf\n",x);
printf("y of point : %lf\n",y);
DestroyPoint(p);
return (0);
}