文件读取和友元函数基础知识

一,文件读取

在C语言中,文件操作都是由库函数,例如I/O函数,字符,字符串函数,数学函数等来完成的。

假如要读取一个txt文件,则要使用文件打开函数:fopen()用来打开一个文件,即文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。 “使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。

FILE *fopen( const char * filename, const char * mode );其中filename 是字符串,用来命名文件,访问模式 mode 的值可以是下列值中的一个:

r :打开一个已有的文本文件,允许读取文件。

w :打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。

a :打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。

r+ :打开一个文本文件,允许读写文件。

w+ :打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。

a+ :打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。

但如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

eg:打开已有文件A.txt 即FILE * r=fopen("A.txt","r");assert(r!=NULL);

然后使用文件读写函数读取文件。其中1.字符读写函数为fgetc和fputc,2.字符串读写函数为fgets和fputs,3.格式化读写函数为fscanf和fprintf。

eg:fscanf(“r,"%s%d%s%f",a[i].name,&a[i].no,a[i].sex,&a[i].score)

最后在文件读取结束时要使用文件关闭函数:fclose()关闭文件。

eg:fclose(r);

其他的像fflush()函数是刷新文件指针,清空与输出或更新数据流参数相关的任何缓冲区。如果发生错误函数返回EOF,否则返回0

freopen()是重新打开数据流,就像先调用fclose关闭文件,然后调用fopen打开文件,成功时返回输入数据流与输入的数据流相关,失败返回NULL.

二,C++友元函数

友元函数是一个不属于类成员的函数,但它可以访问该类的私有成员。可以是常规的独立函数,也可以是其他类的成员。整个类都可以声明为另一个类的友元。为了使一个函数或类成为另一个类的友元,必须由它访问权限的类来声明。类保留了它们的朋友的 "名单",只有名字出现在列表中的外部函数或类才被授予访问权限。通过关键词friend放置在函数的原型之前,即可将函数声明为友元。
eg:friend<return type><funtion name>(<paramete type list>);
在 Budget 类的以下声明中,另一个类的 addBudget 函数 Aux 已声明为友元:eg:class Budget{

        private:

        static double corpBudget;

        double divBudget;

        public:

        Budget() { divBudget = 0; }

        void addBudget(double b)

        {

            divBudget += b;

            corpBudget += divBudget;

        }

        double getDivBudget() const { return divBudget; }

        static double getCorpBudget() { return corpBudget; }

        static void mainOffice(double);

        friend void Aux::addBudget (double) ; // 友元};

注意:1.因为友元函数没有this指针,则参数要有三种情况:

1要访问非static成员时,需要对象做参数;

2要访问static成员或全局变量时,则不需要对象做参数;

3如果做参数的对象是全局对象,则不需要对象做参数;

2.类中通过使用关键字friend 来修饰友元函数,但该函数并不是类的成员函数,其声明可以放在类的私有部分,也可放在共有部分。友元函数的定义在类体外实现,不需要加类限定。

3.一个类中的成员函数可以是另外一个类的友元函数,而且一个函数可以是多个类友元函数。

4.友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值