文件读取和友元函数2024-03-13 13:27:33(); 但在 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.友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。" data-link-title="在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(); 但在 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.友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。">在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(); 但在 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.友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。http://在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(); 但在 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.友元函数可以访问类中的私有成员和其他数据,但是访问不可直接使用数据成员,需要通过对对象进行引用。 上一篇:如何使用PuLP的Gurobi求解器设置MIP启动(初始解决方案)?下一篇:Hive解析json(get_json_object)