程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
文本文件也是ASCII码文件,即文本文件以字符方式存放数据。文本文件的结束以ASCII码的控制字符0x1A表示。
1.文本文件读方法
在C++中,提供了几种文本文件读方法。
(1)使用流运算符直接读取文件数据
文件读操作可以直接使用流的提取运算符“>>”,这个运算符将完成文件的字符转换工作。
例如,以下程序的功能是打开文件test用于读,从中读取字符,然后在显示器上输出这个字符串。
注意:使用“>>”运算符从文件流中读取字符时,遇到空白符或换行符时终止。
(2)使用流成员函数读取文件数据
常用的输入流成员函数有get、getline和read等。
◇get函数
该成员函数有如下几个版本:
int get();
inline istream&get(char*,int,char='\n');
inline istream&get(unsigned char*,int,char='\n');
inline istream&get(signed char*,int,char='\n');
istream&get(char&);
inline istream&get(unsigned char&);
inline istream&get(signed char&);
istream&get(streambuf&,char='\n');
其功能与提取运算符(>>)很相似,主要的不同点是get()函数在读取数据时包括空白字符。对于上例的程序,在读取10个字符时若遇到空白字符则会终止,以下程序可以从文件中读取10个字符,不论其中是否包含空白字符:
◇getline函数
该成员函数有如下几个版本:
inline istream&getline(char*,int,char='\n');
inline istream&getline(unsigned char*,int,char='\n');
inline istream&getline(signed char*,int,char='\n');
其功能是允许从输入流中读取多个字符,并且允许指定输入终止字符(默认值是换行字符),在读取完成后,从读取的内容中删除该终止字符。与上例功能相同的程序如下:
◇read函数
该成员函数有如下几个版本:
istream&read(char*,int);
inline istream&read(unsigned char*,int);
inline istream&read(signed char*,int);
该函数从一个文件读字节到一个指定的存储区域,由长度参数确定要读的字节数。虽然给出长度参数,但当遇到文件结束标记或者文件结束时读操作结束。与上例功能相同的程序如下:
在从文件流中读取字符时,不会像getline函数一样在字符串末尾加上'\0'。
2.文本文件写方法
在C++中提供了几种文本文件写方法。
(1)使用流运算符直接写
文件写操作可以直接使用流的插入运算符“<<”,这个运算符将完成文件的字符转换工作。
例如,以下程序的功能是打开文件test用于写,向其中写入12个字符。(www.chuimin.cn)
(2)使用流成员函数
常用的输出流成员函数有put和write等。
◇put函数
其使用格式如下:
inline ostream&put(char c);
inline ostream&put(signed char c);
该函数把一个字符写到输出流中。以下两个语句的功能是相同的,但第二个受到该I/O流的格式标志字的影响:
◇write函数
其使用格式如下:
inline ostream&ostream∷write(const unsigned char*_s,int_n);
inline ostream&ostream∷write(const signed char*_s,int_n);
该函数把内存中的一块内容写到一个输出文件流中,长度参数指出写的字节数。write函数当遇到空字符时并不停止。
例如,和上例相同功能的程序如下:
3.文本文件的读写示例
【例8.1】分析以下程序的执行结果。
解:上述程序先在当前目录下建立一个test文本文件,并写入“His course is C++36”数据,然后打开该文件,将其中的数据输到变量s中,由于读时遇到空格终止,所以s为“His”。程序的执行结果如下:
His
【例8.2】编写一个程序,将文本文件test.txt复制到文本文件real.txt。
解:使用输入流成员函数get()从文本文件test.txt中读取一个字符ch,然后使用输出流成员函数put()将字符ch写入文本文件real.txt中,继续这一过程直到get()读完为止。程序如下:
【例8.3】编写一个程序,设计一个教师类Teacher,包含工号、姓名和工资数据,输入一个教师数据,将其写到teadata.dat文件中,然后从中读出该数据并输出。
解:在Teacher类中设计setdata、readdata和writedata成员函数实现相应的功能。程序如下:
程序的一次执行结果如下:
输入教师数据:
工号:501↙
姓名:wu↙
工资:3400↙
输出职工数据:
工号:501
姓名:wu
工资:3400
将教师数据写入文件
从文件中读教师数据
输出教师数据:
工号:501
姓名:wu
工资:3400
有关C++程序设计基础教程的文章
程序设计是指设计、编写和调试程序的方法与过程。由于程序是软件的本体,因此软件的质量主要通过程序的质量体现,因此,研究一种切实可行的程序设计方法至关重要。继承是面向对象程序设计方法的一个重要标志,利用继承机制可以大大提高程序的可重用性和可扩充性。......
2023-11-07
虚函数总是在派生环境中使用,用虚函数实现动态多态性的一般步骤如下:在基类中定义虚函数;在派生类中定义与基类虚函数同名、同参数、同返回类型的成员函数,即派生类中的虚函数。分析以下程序的执行结果。图7.18类层次类BaseA包括虚函数bf(),类BaseB包括非虚函数bf(),类Derived是从类BaseA和类BaseB派生的,其中也包括函数bf()。解:设计的类层次如图7.2所示,普通函数printobject()采用动态绑定的方法。......
2023-11-07
声明函数模板的一般格式如下:template<模板参数表>函数返回值类型函数模板名(形参表)函数模板定义由关键字template开头,表示声明一个模板。模板参数表写在尖括号<>中,参数一般由关键字class或typename后加一个标识符构成。Class和typename的意义相同,表示后面的标识符是一个参数类型,代表一个潜在的标准类型或用户定义的类型。例如,定义max函数模板求两个数中的较大者。如下面的声明是错误的:可以看出,用函数模板比函数重载更方便,程序更简洁。......
2023-11-07
类的每一个成员函数都有一个隐含的特殊指针,通常称为this指针,this指针的类型就是成员函数所属的类型。通常不显式使用this指针。this指针是C++实现封装的一种机制,它将对象和该对象调用的成员函数连接在一起,在外部看来,每个对象都拥有自己的成员函数。this指针一般用于返回当前对象自身。程序的执行结果如下:s1∶n=2s2∶n=1s3∶n=3this指针大量用于运算符重载成员函数设计中,这将在后面详细介绍。......
2023-11-07
内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的。即使虚函数在类的内部定义,编译时仍将其看作是非内联的。声明虚析构函数的目的在于:使用delete运算符删除一个对象时,能确保析构函数被正确地执行。如果不相同,则被派生类虚函数的参数类型强制转换为基类中虚函数的参数类型。......
2023-11-07
同样,类模板不能直接使用,必须先实例化为相应的模板类,定义该模板类的对象后才能使用。程序的一次执行如下:填充一个字符数组第1个数据:a↙第2个数据:b↙第3个数据:c↙第4个数据:d↙第5个数据:e↙数组的内容是:a b c d e填充一个双精度数组第1个数据:1.2↙第2个数据:5.6↙第3个数据:3.1↙数组的内容是:1.25.63.1图5.3类模板、模板类和对象之间的关系......
2023-11-07
throw、try和catch语句的一般语法如下:throw表达式;异常处理的执行过程如下:程序通过正常的顺序执行到达try语句块,然后执行try块内受保护的语句。对于fun语句,其捕获异常的过程是相似的。只要找到一个匹配的异常类型,后面的异常处理都将被忽略。......
2023-11-07
图2.3对象stu1和stu2实际上,类Student的所有成员函数放在公用区中,每个函数代码有一个地址,类Student的每个对象中只存放自己的数据成员值和指向公共区中对应函数的地址,也就是说,类的成员函数是共享的,如图2.4所示,这种对象的存储空间分配方式不仅节省了存储空间,而且各个对象的数据成员分别存放,互不相干。......
2023-11-07
相关推荐