南京邮电大学 学年第 二 学期
《面向对象程序设计及C++》(期末)试卷1
院(系) 班级 学号 姓名 (★温馨提醒:
① 这是试题纸,教师不批改,请将所有最终答案写在答题纸上 ② 请在试题纸和答题纸上均完整填写班级、学号、姓名信息 ③ 考试结束时请将答题纸、试题纸及草稿纸一并交来 谢谢合作!祝同学们取得好成绩!)
一、填空题(共10分,每空1分)
1、开发C++程序与开发其他高级语言的程序一样,包括编辑、编译、 ① 和 ② 四个步骤。
2、C++语言中的标准输出流对象是 ③ ,在程序中用于代表标准输出设备。
3、对于已存在的定义“int *ptr=new int [10] ;”,应该用 ④ 语句释放动态内存空间。
4、C++语言提供了处理异常的有效机制,通过 ⑤ 抛出异常,通过 ⑥ 检测异常、通过catch 捕捉并处理异常。
5、类的成员有3种访问属性,其默认的访问属性为 ⑦ ;访问属性为___⑧ 的成员既可被派生类继承又保持了封装和信息隐藏性。(请填关键字)
6、C++支持两种多态性,其中函数重载和运算符重载用于实现 ⑨ ,而虚函数用于实现 ⑩ 。
二、单选题(共20分,每题2分)
1、假设已有定义:const char *name="chen";下面语句中错误的是 。 A 、name[3]= 'a'; B 、name="lin"; C 、name=new char[5]; D 、cout<<name[3];
2、设有语句void f(int a[10],int &x); int y[10],*py=y,n=10;
则对函数f 的正确调用语句是 。
A 、f(py[10],n);
B 、f(py,n);
C 、f(*py,&n);
D 、f(py,10);
装 订 线 内 不 要 答 题
自 觉
遵 守
考 试 规 则,诚 信 考 试,绝 不
作 弊
3、下列不正确的重载函数是。
A、int print(int X); 和void print(float X);
B、int disp(int X); 和char disp(int Y) const;
C、void disp(char * str,int Y);和int disp(char * s,int X);
D、int view(int X , int y); 和int view(int X);
4、有关this指针的描述中,错误的是。
A、this指针可以在程序中显式使用
B、this指针是在使用对象时由系统自动生成
C、this指针是指向当前对象的指针
D、this指针是指向成员函数的指针
5、关于成员函数特征的下列描述中,是错误的。
A、成员函数一定是内联函数
B、成员函数可以重载
C、成员函数可以设置缺省参数值
D、成员函数可以是静态的
6、以下关于构造函数的叙述不正确的是。
A、构造函数名必须和类名一致
B、构造函数在定义对象时自动执行
C、构造函数无任何函数类型
D、一个类的构造函数有且仅有一个
7、下列哪一项不能访问基类的保护成员。
A、基类的友元函数
B、派生类的对象
C、基类的成员函数
D、公有派生类的成员函数
8、下面有关基类与公有派生类的赋值兼容原则,正确的是。
A、公有派生类对象不能赋给基类对象
B、基类对象能赋给其公有派生类的引用
C、基类对象不能赋给公有派生类对象
D、公有派生类对象地址不能赋给基类指针变量
9、______是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。
A、虚析构函数
B、虚构造函数
C、纯虚函数
D、静态成员函数
10、假定要对类AB以友元函数形式重载加号运算符,实现两个AB类对象的加法,并返回相加结果,则该函数的声明语句为:。
A、f riend AB operator+(AB & a , AB & b);
B、friend operator+(AB a) ;
C、friend AB operator+(AB & a) ;
D、friend AB & operator+( );
三、读程题(共30分,每空2分)
1、以下程序运行后的输出结果第一行是(1) ,第二行是
(2) 。
#include <iostream>
指向类成员函数的指针using namespace std;
int i=0;
void main()
{ int i=5;
cout<<i<<endl;
::i=i*20;
cout<<::i<<endl;
}
2、以下程序运行后的输出结果第一行是(3) ,第二行是(4) ,第三行是(5) 。
#include<iostream>
using namespace std;
class base
{
int n;
public:
base(int i) { n=i; }
int getn( ) {return n;}
friend int add(base &s1,base s2);
};
int add(base &s1,base s2)
{
int result= s1.n+s2.n;
int t=s1.n; s1.n=s2.n; s2.n=t;
return result;
}
void main( )
{
base A(29),B(11);
cout<<add(A,B) <<endl;
cout<&()<<endl;
cout<&()<<endl;
}
3、以下程序运行后的输出结果第一行是 (6) ,第二行是 __(7)_ 。
#include <iostream> using namespace std; template<class T> T fun(T x[],int n) {
int i;
T value=x[0]; for (i=1;i<n;i++) if (value<x[i]) value=x[i]; return value; }
void main()
{ int arrayA[]={5,8,2,9,1,7};
double arrayB[]={3.8,5.8,2.7,9.4,1.6}; cout<<fun(arrayA,6)<<endl; cout<<fun(arrayB,5)<<endl; }
4、以下程序运行后的输出结果第一行是 (8) ,第二行是 (9) 。 #include <iostream>
using namespace std; class base {
public: virtual void fun(void)
{ cout<<"base::fun"<<endl; } };
class divide:public base { public:
void fun(void)
{ cout<<"divide::fun"<<endl;
} };
void main(void) { divide d;
装 订 线 内 不 要 答 题
自 觉
遵 守 考 试 规 则,诚 信 考 试,绝 不 作 弊
装 订 线 内 不 要 答 题
自
觉
遵 守 考 试 规 则,诚 信 考 试,绝 不
作 弊
base b1;
base & b2=d;
b2.fun();
b1.fun();
}
5、以下程序运行后有多行输出结果,其中第一行是(10),第二行是(11)第三行是(12),第四行是(13)。
#include<iostream>
using namespace std;
class A
{
int n;
public:
A( )
{ cout<<"constructing A"<<endl; }
~A( )
{ cout<<"destructing A"<<endl; }
};
class B:public A
{
int n;
A a;
public:
B( )
{ cout<<"constructing B"<<endl; }
~B( )
{ cout<<"destructing B"<<endl; }
};
void main( )
{ B b;
}
6、以下程序运行后的输出结果第一行是(14) ,第二行是(15) 。
#include<iostream>
using namespace std;
const double PI=3.14159;
class Shape //定义抽象基类Shape
{public:
virtual void display( ) =0; //声明纯虚函数
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论