記事一覧(Cの文法(1)~(17),他) まず覚えるCの文法(progC.pdf) P1A-1: group クラスの変更例 //------------------------------------- class group{ protected: member *top; int max, k; member* addr(int); public: group(member*, int); member* top_is(void){return top;}; int max_is(void){return max;}; virtual void show(void); virtual void show(int); virtual void add(int, char*, char*); virtual void del(int); virtual void load(char*); virtual void save(char*); }; //------------------------------------- P1A-2: 追加関数 //------------------------------------- void group::show(void){ member *p=top; for(k=0; k<max; k++,p++){ if(p->id==0){break;} printf("%d, %s, %s\n", p->id, p->name, p->mail); } } void group::load(char *s){ FILE *fp=fopen(s, "r"); member *p=top; int i; char n[10], m[30]; if(fp==NULL){printf("-\n"); return;} for(k=0; k<max; k++,p++){ fscanf(fp, "%d %s %s\n", &i, n, m); p->id=i; strcpy(p->name, n); strcpy(p->mail, m); if(p->id==0){break;} } fclose(fp); } void group::save(char *s){ FILE *fp=fopen(s, "w"); member *p=top; if(fp==NULL){printf("-\n"); return;} for(k=0; k<max; k++,p++){ fprintf(fp, "%d\t%s\t%s\n", p->id, p->name, p->mail); if(p->id==0){break;} } fclose(fp); } //------------------------------------- |
P1.h の group クラスの変更案を P1A-1 に示します. 変更理由は (1) top と max を見えるようにする. (2) 全体を表示する show() を追加. (3) ファイル入出力用の関数を追加. で,追加した関数の構成例を P1A-2 に示しています. ・top や max の値は見るだけで変更できません. ・show(void) と show(int) は引数が違うので同じ名 前を使えます(printf や scanf は例外).関数の多 重定義については別途説明します. P1.h に変更を施したヘッダファイル P1A.h を作り, P1A.txt: 入力ファイル //------------------------------------- 1 Aoki aoki@xxx.ne.jp 2 Itoh taro@yyy.jp 5 Tanaka foo@zzz.ac.jp 0 //------------------------------------- を準備して, P1A.cpp: ファイル入出力 //------------------------------------- #include "P1A.h" int main(void){ member *p=new member[10]; group igo(&p[0], 10); igo.load("P1A.txt"); igo.show(); igo.del(2); igo.save("P1B.txt"); //delete[] p; return 0; } //------------------------------------- をコンパイルして実行し,出力ファイル P1B.txt の内 容を確認してください. ・「member *p; p=new member[10];」によって member の配列が動的に作成され,その先頭番地が p に設定 されます. ・new で作成した配列の削除は delete[] で行います. 「int *p=new int;」のときは「delete p;」です. ・P1A.cpp では 終了直前に領域を削除しても無意味な のでコメントにしています.[1-2] New演算子 - Wikipedia
|