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() */