C言語によるオブジェクト指向風プログラミング
以下のコードは、構造体のメンバが公開されるオブジェクト指向風プログラミングのコード例です。
robot.h
#ifndef ROBOT_H
#define ROBOT_H
typedef struct {
double x;
double y;
} Robot;
extern Robot* newRobot(void);
extern void deleteRobot(Robot*);
extern void setRobot(Robot*, double, double);
extern double getxRobot(Robot*);
extern double getyRobot(Robot*);
extern void moveRobot(Robot*, double, double);
extern void printRobot(Robot*);
#endif
robot.c
#include "robot.h"
#include <stdio.h>
#include <stdlib.h>
Robot* newRobot(void) {
return malloc(sizeof(Robot));
}
void deleteRobot(Robot* robotp) {
free(robotp);
}
void setRobot(Robot* robotp, double x, double y) {
robotp->x = x;
robotp->y = y;
}
double getxRobot(Robot* robotp) {
return robotp->x;
}
double getyRobot(Robot* robotp) {
return robotp->y;
}
void moveRobot(Robot* robotp, double dx, double dy) {
robotp->x += dx;
robotp->y += dy;
}
void printRobot(Robot* robotp) {
printf("x = %f\n", robotp->x);
printf("y = %f\n", robotp->y);
}
main.c
#include "robot.h"
int main(void) {
Robot* robotp = newRobot();
setRobot(robotp, 0, 0);
moveRobot(robotp, 1, 1);
printRobot(robotp);
deleteRobot(robotp);
}
以下のコードは、構造体のメンバが隠蔽されるオブジェクト指向風プログラミングのコード例です。
robot.h
#ifndef ROBOT_H
#define ROBOT_H
typedef struct robot Robot;
extern Robot* newRobot(void);
extern void deleteRobot(Robot*);
extern void setRobot(Robot*, double, double);
extern double getxRobot(Robot*);
extern double getyRobot(Robot*);
extern void moveRobot(Robot*, double, double);
extern void printRobot(Robot*);
#endif
robot.c
#include "robot.h"
#include <stdio.h>
#include <stdlib.h>
struct robot {
double x;
double y;
};
Robot* newRobot(void) {
return malloc(sizeof(Robot));
}
void deleteRobot(Robot* robotp) {
free(robotp);
}
void setRobot(Robot* robotp, double x, double y) {
robotp->x = x;
robotp->y = y;
}
double getxRobot(Robot* robotp) {
return robotp->x;
}
double getyRobot(Robot* robotp) {
return robotp->y;
}
void moveRobot(Robot* robotp, double dx, double dy) {
robotp->x += dx;
robotp->y += dy;
}
void printRobot(Robot* robotp) {
printf("x = %f\n", robotp->x);
printf("y = %f\n", robotp->y);
}
main.c
#include "robot.h"
int main(void) {
Robot* robotp = newRobot();
setRobot(robotp, 0, 0);
moveRobot(robotp, 1, 1);
printRobot(robotp);
deleteRobot(robotp);
}