• ベストアンサー

ライブラリ関数と同名のメンバ関数

たとえば、以下のように 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; }

質問者が選んだベストアンサー

  • ベストアンサー
  • mac_res
  • ベストアンサー率36% (568/1571)
回答No.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; }

yasuch
質問者

お礼

クラス名を指定しないでスコープ解決演算子を 使うだけだったんですね。 ありがとうございました。

その他の回答 (1)

  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.1

::fclose(fp);

関連するQ&A

専門家に質問してみよう