您的当前位置:首页C++面向对象程序设计期末复习资料

C++面向对象程序设计期末复习资料

2023-01-03 来源:爱问旅游网
题型与考点复习 一.选择题(20题,共30分)  作用域运算符的功能  设置虚基类的目的  构造函数的特征  析构函数的说法

 重载函数在调用时选择的依据  静态成员的特性  友元  派生类的描述

 运算符在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 class RMB { public:

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 // (1)包含头文件 文件输入输出 #include #include using namespace std; int main( ) {

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 #include #include void main() {

ifstream myf(\"d:\\\\myabc.txt\

if (myf.fail()) // 如果要检查文件是否打开,则须判断成员函数fail( ): { }

char txt[255]; myf>>txt; while (!myf.eof())

cout<<\"file no exist!\"<//如果该文件不存在,则结果出现file no exist!

//!myf.eof()条件成立,则myf.eof()为0,即还没读取到流中最后的文件结束符;否则读取到最后的文件结束符是返回非0值。 }

6.编程由用户输入任意一些字符串并按行保存到磁盘文件(d:\\\\myabc.txt)中。 #include #include #include void main() {

char txt[255]; while (1) {

cin.getline(txt,255);

ofstream myf(\"d:\\\\myabc.txt\"); // 默认ios::out和ios::trunc方式

//ofstream myf(\"d:\\\\myabc.txt\ { }

cout<>txt;

//调用输入流istream类的cin对象的成员函数getline P181 3.(1) //请问输入的数据以什么字符结束?为什么?(默认:\\n,要回车两次。)

if (strlen(txt)==0)

break;

}

}

myf<

因篇幅问题不能全部显示,请点此查看更多更全内容