- ベストアンサー
ライブラリ関数と同名のメンバ関数
たとえば、以下のように fclose という メンバ関数を定義し、このクラスの実装のなかで 標準ライブラリ関数 fclose を呼びたいときには どうすれば良いのでしょうか。 別の名前にするというのは無しでお願いします。 #include <stdio.h> class MyFile { public: int fclose(FILE* fp); }; int MyFile::fclose(FILE* fp) { printf("閉じました\n"); fclose(fp); // 標準ライブラリ関数のfcloseを呼びたい return 0; } main() { FILE *fp=NULL; MyFile f; f.fclose(fp); return 0; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> class MyFile { public: int fclose(FILE* fp); FILE *open(char *fname,char *mode); char *fgets(char *buf, int size, FILE *fp); }; int MyFile::fclose(FILE* fp) { printf("閉じました\n"); ::fclose(fp); // 標準ライブラリ関数のfcloseを呼びたい return 0; } FILE* MyFile::open(char *fname,char *mode) { FILE *fp; printf("開きました\n"); fp = ::fopen(fname,mode); // 標準ライブラリ関数のfopenを呼びたい return fp; } char * MyFile::fgets(char *buf, int size, FILE *fp) { return (::fgets(buf,size,fp)); } main() { FILE *fp; char buf[BUFSIZ]; MyFile f; fp = f.open("test.txt","r"); while(f.fgets(buf,BUFSIZ,fp) != NULL) { printf(buf); } f.fclose(fp); return 0; }
その他の回答 (1)
- sha-girl
- ベストアンサー率52% (430/816)
::fclose(fp);
お礼
クラス名を指定しないでスコープ解決演算子を 使うだけだったんですね。 ありがとうございました。