重载函数在调用时选择的依据 静态成员的特性 友元 派生类的描述
运算符在C++中不能被重载? 动态联编的描述 纯虚函数和抽象类的描述 抽象类的使用
delete删除一个动态对象 new运算符的下列描述
C++与C语言关系的描述
类定义中,错误的语句 书3.1.1(7) 自动调用该类构造函数次数 静态数据成员的描述 派生类的描述
派生类的构造函数的初始化列表中,不能包含 虚基类的声明 赋值兼容规则 虚函数 纯虚函数表述 抽象类表述 重载运算符函数
成员函数重载的运算符、友元函数重载的运算符 关键字class和typename 类模板表述
重载了运算符<< 书 7.2节 语句ofstream f()
二.填空题(15空,共30分)
标准输入输出流对象cin cout 类中的数据和成员函数
类都有一个隐含的指针指向:正在调用成员函数的对象
非成员函数访问类成员 虚基类的目的:解决二义性问题 基类数据成员的初始化 operator++
运算符函数调用格式 异常处理的保留字
异常错误处理函数terminate() 、set_terminate() 三.程序的执行、填空(4题,共20分) 四.编程题(3小题,共20分)
例题 一.选择题
1.如果表达式++i*k中的“++”和“*”都是重载的友元运算符,若采用运算符函数调用格式,则表达式还可以表示为 A 。 A. operator*(i.operator++(),k) B. operator*(operator++(i),k)
C. i.operator++().operator*(k) D. k.operator*(operator++(i))
2.在下列成对的表达式中,运算符“/”的意义相同的一对是 D 。 A.8/3和8.0/3.0 B.8/3.0和8/3 C.8.0/3和8/3 D.8.0/3.0和8.0/3
3.如果表达式y*x++中,“*”是作为成员函数重载的运算符,“++”是作为友元函
数重载的运算符,采用运算符函数调用格式时,该表达式应表示为 C 。 A. x.operator++(0).operator*(y) B. operator*(x.operator++(0),y)
C. y.operator*(operator++(x,0) 参考书例6.8 D. operator*(operator++(x,0),y)
4. C++流中重载了运算符<<,它是一个 D 。 A.用于输出操作的成员函数 B.用于输入操作的成员函数 C.用于输入操作的非成员函数 D.用于输出操作的非成员函数 二.填空题
1.面向对象的程序设计的三大特征继承性 、 封装性 和多态性。 2.类中成员的组成包含哪两个部分 数据成员 、 成员函数 3表达式x=operator-(y,z)还可以表示为 x=y-z 。 4.定义Student类的后自增运算符++的重载语法格式为 Student operator ++(int); 。 5.已知
int DBL(int n){ return n+n;} 和
long DBL(long n){return n+n;}
是一个函数模板的两个实例,则该函数模板的定义是 template T DBL(T n) {return n+n;} 6.如果表达式x=y*z中的“*”是作为成员函数重载的运算符,采用运算符函数调用格式时,该表达式应表示为 x=y.operator * (z) 7.表达式operator++(x , int)可以表示为 x++ 三.程序的执行、填空 1.构造函数与析构函数的调用 2.例3.15 3.第六章习题5当ch==’u’时的运行结果和当ch==’f’时的运行结果 4.例6.1(代码填空) #include class RMB{ public: RMB(unsigned int d, unsigned int c); RMB operator+(RMB&); // 声明运算符函数,重载+,只有一个参数 RMB& operator++(); // 声明运算符函数,重载++,无参数 void display(){ cout << (yuan + jf / 100.0) << endl; } protected: unsigned int yuan; unsigned int jf; }; RMB::RMB(unsigned int d, unsigned int c) { yuan = d; jf = c; while(jf >=100){ yuan ++; jf -= 100; } } RMB RMB::operator +(RMB& s) // 定义运算符函数 { unsigned int c =jf + s.jf; //相当于unsigned int c = this->jf + s.jf unsigned int d =yuan + s.yuan; RMB result(d,c); // 创建RMB对象result return result; } RMB& RMB::operator++() // 定义运算符函数 { jf ++; if(jf >= 100){ jf -= 100; yuan++; } return *this; // 返回当前对象 } void main() { RMB d1(1, 60); RMB d2(2, 50); RMB d3(0, 0); d3 = d1 + d2; //调用重载运算符函数operator +,使RMB类的两个对象可以相加 //相当于 d3=d1.operator+(d2) ++d3; //调用重载运算符函数operator ++,使RMB类的对象d3可以自增 //相当于d3.operator ++(); d3.display(); } 5.例6.3(代码填空) #include RMB(unsigned int d, unsigned int c); friend RMB operator +(RMB&, RMB&); // 声明友元运算符函数 friend RMB& operator ++(RMB&); // 声明友元运算符函数 void display(){ cout <<(yuan + jf / 100.0) << endl; } protected: unsigned int yuan; unsigned int jf; }; RMB::RMB(unsigned int d, unsigned int c) { yuan = d; jf = c; while ( jf >=100 ){ // 确保角分值小于100 yuan ++; jf -= 100; } } RMB operator+(RMB& s1, RMB& s2) // 定义友元运算符函数 { unsigned int jf = s1.jf + s2.jf; unsigned int yuan = s1.yuan + s2.yuan; RMB result( yuan, jf ); return result; } RMB& operator ++(RMB& s) { s.jf ++; if(s.jf >= 100) { s.jf -= 100; s.yuan++; } return s; } void main() { RMB d1(1, 60); RMB d2(2, 50); RMB d3(0, 0); d3 = d1 + d2; //d3=operator+(d1,d2); ++d3; //operator++(d3); d3.display(); } 6.例7.14(代码填空) #include #include ifstream ifile; // (2)建立文件流对象 ofstream ofile; ifile.open(\"d:\\\\fileIn.txt\"); // (3) 打开D盘根目录下的fileIn.txt文件 ofile.open(\"e:\\\\fileOut.txt\"); if(ifile.fail() || ofile.fail()) // 测试打开操作是否成功 { cerr << \"open file fail\\n\"; return EXIT_FAILURE; // 返回值EXIT_FAILURE(在cstdlib库中定义) // 用于向操作系统报告终止不成功 } char ch; ch = ifile.get(); // (4) 进行读写操作 while(!ifile.eof( )) { ofile.put(ch); // 将字符输出到输出文件流对象中 ch = ifile.get( ); // 从输入文件对象流中读取一个字符 } ifile.close(); // (5) 关闭文件 ofile.close(); return 0; } 四.编程题 1.创建一个雇员类,该类中数据成员有姓名、家庭成地址和邮政编码等。其功能有修改姓名、显示数据信息。要求其功能函数的原型放在类定义体中。 2.定义一个复数类,其属性为数据的实部和虚部,要求定义和使用构造函数与拷贝构造函数,并定义成员函数显示复数的值。 3.定义一个抽象类shape,在此基础上派生出rectangle类和circle类,二者都由getarea()函数计算对象的面积,getperim()函数计算对象的周长。 4.下图所示为各个类的继承关系,分别定义交通工具类Vehicle、船类Boat、汽车类Automobile和跑车类SportsCar,其中Vehicle类为抽象类,定义虚函数display用来显示各类的相关消息,编写主函数对其加以测试(要求体现多态性)。(图略) 5.编程将磁盘文件(d:\\\\myabc.txt)内容输出到屏幕上。 #include ifstream myf(\"d:\\\\myabc.txt\ if (myf.fail()) // 如果要检查文件是否打开,则须判断成员函数fail( ): { } char txt[255]; myf>>txt; while (!myf.eof()) cout<<\"file no exist!\"< //!myf.eof()条件成立,则myf.eof()为0,即还没读取到流中最后的文件结束符;否则读取到最后的文件结束符是返回非0值。 } 6.编程由用户输入任意一些字符串并按行保存到磁盘文件(d:\\\\myabc.txt)中。 #include char txt[255]; while (1) { cin.getline(txt,255); ofstream myf(\"d:\\\\myabc.txt\"); // 默认ios::out和ios::trunc方式 //ofstream myf(\"d:\\\\myabc.txt\ { } cout< //调用输入流istream类的cin对象的成员函数getline P181 3.(1) //请问输入的数据以什么字符结束?为什么?(默认:\\n,要回车两次。) if (strlen(txt)==0) break; } } myf< 因篇幅问题不能全部显示,请点此查看更多更全内容