Datei: obj.c


    1   /*
    2    *      obj.c
    3    *      C "objektorientiert"
    4    *      Die C-"Klasse" string
    5    *      
    6    */
    7    
    8   #include <stdio.h>
    9   #include <string.h>
   10   
   11   #define SLEN 256        /* Max. Stringlaenge    */
   12   
   13   struct string {         /* Die "Klasse" String  */
   14     char s[SLEN];         /*   Stringpuffer       */
   15     int l;                /*   Stringlaenge       */
   16     void (*put)();        /*   String setzen      */
   17     char *(*get)();       /*   String holen       */
   18     int (*len)();         /*   Stringlaenge holen */
   19   };
   20   
   21   struct string *init(char *);
   22   
   23   void main(void)
   24   {
   25     char buf[256];
   26     struct string *s1, *s2;
   27     
   28     s1 = init("");
   29     s2 = init("hallo");  
   30     
   31     printf("s1: %s %d\n", (*s1->get)(s1), (*s1->len)(s1));
   32     printf("s2: %s %d\n", (*s2->get)(s2), (*s2->len)(s2));
   33     
   34     printf("String fuer s1: ");
   35     gets(buf);
   36     (*s1->put)(s1, buf);
   37     printf("s1: %s %d\n", (*s1->get)(s1), (*s1->len)(s1));
   38   
   39   } /* main() */
   40   
   41   /* Interne Routinen fuer die "Klasse" string */
   42   
   43   /* Stringlaenge geben */
   44   static int _len(struct string *s)
   45   {
   46     if (s)
   47       return(s->l);
   48     
   49   } /* _len() */
   50   
   51   /* String geben */
   52   static char *_get(struct string *s)
   53   {
   54     if (s)
   55       return(s->s);
   56       
   57   } /* _get() */
   58   
   59   /* String setzen */
   60   static void _put(struct string *s, char *cs)
   61   {
   62     if(s && cs) {
   63       strcpy(s->s, cs);
   64       s->l = strlen(s->s);
   65     }
   66   
   67   } /* _put() */
   68   
   69   /* Initialisierungsroutine fuer "Objekt" der "Klasse" string */
   70   
   71   struct string *init(char *cs)
   72   {
   73     struct string *s;
   74     
   75     s = (struct string *) calloc(1, sizeof(struct string));
   76     if (s) {  
   77       strcpy(s->s, cs);
   78       s->l = strlen(s->s);
   79       s->put  = _put;
   80       s->get  = _get;
   81       s->len  = _len;
   82     }
   83     return(s);
   84       
   85   } /* init() */


Erzeugt von c2html 1.0