};
class B:public A {
public: void Print() { cout<<\ } virtual void fun() { cout<<\ } };
void text(A &a) { a.fun(); }
void main() {
A a; B b; a.Print(); b.Print(); text(b); }
9.6 简单回答下列问题
1. 运算符重载使用成员函数方法和友元函数方法是否都可以?并且是没有区别的吗? 答: 两种方都法可以。有区别,参数个数不同。
2. 运算符重载实际上通过函数来重新定义运算符的功能,运算符重载的功能直接通过函
数调用是否可以? 答: 可以。
3. 多态性中对函数的选择从时间上来区分有哪两种方式?
答: 一种是在编译时选定函数,称静态联编方式,另一种是在运行时选定函数,称动态联编方式。
4. 有虚函数是否就一定是动态联编?非虚函数是否就一定是静态联编? 答: 不一定。一定是。
5. 在多层次的继承结构中,基类与派生类中存在着虚函数,这时调用虚函数就一定实现
动态联编吗? 答:不一定。
第10章 C++语言的输入/输出操作
练习题10
10.1 判断题
√ 1.C++语言提供的文件操作包含文本文件和二进制文件。 × 2.预定义的提取符和插入符不可以再重载。
√ 3.C++语言中的读写函数,不仅可用于标准文件,也可用于磁盘文件。
36
× 4.使用插入符输出一个字符串与使用write()成员函数输出一个字符串是没有差别的。 × 5.使用成员函数put()一次可写入一个字符串。
× 6.读取一个字符的成员函数get()是不可以带参数的。
√ 7.读取一行字符的成员函数getline()具有一个默认的参数值'\\n'。 × 8.使用read()成员函数一次只能读取一行字符。 √ 9.输出数据的默认对齐方式是右对齐。
√ 10.使用流对象的成员函数进行格式输出要比使用控制符进行格式输出复杂些,因为成员函数需要对象调用,而控制符可直接使用。
√ 11.在非标准文件操作中,应该先定义流对象,再打开文件,必须使用open()函数。 √ 12.关闭打开的文件时使用成员函数close(),该函数无参数。
√ 13.进行二进制文件操作时,在打开文件方式中增加ios::binary选项。
× 14.在定位文件的读/写指针的操作中,只能向增加字节数的方向移动,不能向减少字节数的方向移动。
√ 15.C++语言的文件操作中,既可以顺序读写,又可以随机读写。
× 16.读/写指针相关函数tellp()的返回值是一个long int型数,这表示当前读指针距文件尾的字节数。
√ 17.在文件操作中,通常使用打开文件的流对象的值来判断打开文件是否成功。 × 18.文件结束函数eof()返回值为0时,表示文件结束。 10.2 单选题
1.C++语言程序中进行文件操作时应包含的头文件是( A )。 A.fstream.h B.math.h C.stdlib.h D.strstrea.h
2.C++语言程序中进行字符串流操作时应包含的头文件是( D )。 A.fstream.h B.math.h C.stdlib.h D.strstrea.h
3.C++语言程序中使用控制符进行格式输出时应包含的头文件是( B )。 A.fstream.h B.iomanip.h C.math.h D.strstrea.h
4.下列各语句是输出字符'A'的,其中错误语句是( D )。 A.cout<<'A'; B.cout.put('A'); C.char ch='A';cout< 5.在ios类中提供的控制格式的标志位中,八进制形式的标志位是( C )。 A.hex B.dec C.oct D.basefield 6.在打开磁盘文件的访问方式常量中,用来以追加方式打开文件的是( C )。 A.in B.out C.ate D.app() 7.在下列读写函数中,进行写操作的函数是( C )。 A.get() B.read() C.put() D.getline() 8.已知文本文件abc.txt,以读方式打开,下列的操作中错误的是( D )。 A.fstream infile (\B.ifstream infile (\C.ofstream infile (\ D.fstream infile; infile.open(\9.已知:ifstream input;下列写出的语句中,将input流对象的读指针移到距当前位置后(文件尾方向)100个字节处的语句是( C )。 A.input.seekg(100,ios::beg); B.input.seekg(100,ios::cur); C.input.seekg(?100,ios::cur); D.input.seekg(100,ios::end); 37 10.3 填空题 1.在格式输出的标志字中,设置格式对齐位的有 left 、 right 和 internal 。 2.在格式输出中,设置和清除格式标志位的成员函数分别是 setf() 和 unsetf() 。 3.系统规定与标准设备对应的4个流对象是 cin 、 cout 、 cerr 和 clog 。 4.在控制符中,用来指定八进制、十进制和十六进制的控制符分别是 oct 、 dec 和 hex 。 5.在定位读/写指针的带有两个参数的函数中,表示相对位置方式的3个常量是 cur 、 beg 和 end 。 10.4 分析下列程序的输出结果 1. #include int a=234; cout< cout< cout< *****234ok 1.23457 ***1.235 2. #include ostream &out1(ostream &outs) { outs.setf(ios::left); outs< void main() { int a=123; cout< cout< 173##### 3. #include for(int i=1;i<6;i++) cout< 38 } 答: WWWWWWWWW WWWWWWW WWWWW WWW W 4. #include fstream inf,outf; outf.open(\ if(!outf) { cout<<\ abort(); } outf<<\ outf<<\ outf<<\ outf.close(); inf.open(\ if(!inf) { cout<<\ abort(); } char ch[80]; int a(1); while(inf.getline(ch,sizeof(ch))) cout< 答: 1:abcdef 2:123456 3:ijklmn 5. #include fstream f; f.open(\ if(!f) { cout<<\ abort(); } char ch[]=\ for(int i=0;i while(f.get(c)) cout< 39 } 答: abcdefg1234567. 6. #include char name[20]; long int number; int totalscore; }stu[5]={\ void main() { student s1; fstream file(\ if(!file) { cout<<\ abort(); } for(int i=0;i<5;i++) file.write((char *)&stu[i],sizeof(student)); file.seekp(sizeof(student)*2); file.read((char *)&s1,sizeof(stu[i])); cout< 答: Yan 5002011 278 10.5 编程题 1.计算从键盘输入的字符串中子串\出现的次数。 提示:可使用函数peek()返回输入流中的下一个字符,并不提取该字符。 答:编程如下: #include int ch,n=0; cout<<\输入含有若干个xy子串的字符序列,以 cout<<\出现xy子串的次数为 \} 2. 编程统计一个文本文件中字符的个数。 答: 编程统计已存文件abc.txt中字符个数,程序如下: #include fstream f; f.open(\ if(!f) 40