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);
}