電子書籍の厳選無料作品が豊富!

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

A 回答 (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;
}
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2005/12/21 15:25

::fclose(fp);

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!