杭州电子科技大学信息工程学院学生考试卷( A)卷
4. 虚函数可以实现________ 。
A.静态多态性; B.链接时多态性; C.运行时多态性; D. 编译时多态性
课程名称
面向对象程序设计
考试日期 07 年 6 月 17 日 成 绩
考生姓名
学号(8 位)
任课教师姓名
班级
专业
一. 是非判断题(5 题,共 10 分)
1. C++是面向对象的程序设计语言,不是面向过程的程序设计语言。 (
2. 结构体对象在默认情况下可以直接访问其数据成员。 (
3. 析构函数可以重载,也可以有数据返回类型。 ( )
4. 基类指针可以指向派生类对象,派生类指针也可以指向基类对象。(
5. C++中多态性是指编译过程的多态性和运行时的多态性。 (
)
)
)
)
二. 单项选择题(每题 2 分,共 20 分)
1.在 C++程序中,对象之间的相互通信通过(
A. 继承实现 B. 调用成员函数实现 C. 封装实现 D. 函数重载实现
)
2. 在 C++中,函数原型不能标识(
A. 函数的返回类型 B. 函数参数的个数 C. 函数参数类型 D. 函数的功能
)
}
D. template
5. 若一个应用程序中有类定义 class Person,在它的 public 成员中定义了若干成员函数,
以下_____ 为纯虚函数。
A. void count ( ){};
C.
virtual void count ( ) =0;
B. void count ( ) = 0;
virtual void count ( ){};
D.
6. 设函数声明语句中的参数表为 (int &a, int &b, int c) ,函数体中 a , b , c 三个变量
的值都发生变化;主函数中调用此函数的实参表为 (x,y,z) ,调用函数语句执行后,以下
叙述正确的是________ 。
A. 变量 x 和 y 的值发生变化
C. 变量 x 、 y 、 z 的值都发生变化 D. 只有变量 z 的值发生变化
B. 变量 x 和 y 的值不发生变化
7. 设有以下定义:
class Circle : public Point {
double r ;
public:
… …
}
则正确的描述为_________
A.
Point 是 Circle 的派生类; B.
C. Circle 是 Point 的派生类; D.
r 是 Point 的数据成员
r 是类 Circle 和类 Point 共同的数据成员
8.如果可以用 p.a 的形式访问派生类对象 p 的基类成员 a,则 a 应该是(
A.私有继承的公有成员 B.公有继承的私有成员
C.公有继承的保护成员 D.公有继承的公有成员
)
B. template
Q F(Q x){
return x+x;
3.下面函数模板定义中不正确的是()
A. template
Q F(Q x){
return Q+x;
}
C. template
T F(T x){
return x*x;
}
T F(T x){
return x>1;
}
第 - 1 -页共 7页
① 私有继承后该函数是派生类的私有成员,外部函数不能访问。对应号为“←(______)”
② 不论公有派生或私有派生,派生类都不能用基类私有成员。对应号为“←(______)”
③ 因为该类有构造函数,定义对象时不能缺省参数。对应号为“←(______)”
④ 派生类新增加的私有成员,外部函数不能直接访问。对应号为“←(______)”
⑤ 私有成员,外部函数不能直接访问。对应号为“←(______)”
#include
class
public:
x(int a1=0, int b1=0)
int get1( )
};
class
{a=a1; b=b1;}
{return a+b;}
x { int a,b;
y:private
x {int c;
public:
y(int a1, int b1, int c1): x(a1,b1)
{c=c1;}
int get2( ) {return
int get3( ) {return
a+b+c;}
c;}
←(1)
9. 以下叙述中正确的是:(
)
A. 在定义构造函数时可以指定返回类型 B. 在定义析构函数时不能指定参数
C. 一个类只能有一个构造函数 D. 在一个类可以有多个析构函数
10. 对于类定义
class A{
public:
virtual void func1( ){ }
void func2( ){ }
};
class B:public A{
public:
void func1( ){cout<<〃class B func 1〃<#include
四. 输出程序结果(每题 9 分,共 36 分)
1.
class Time { char a[9];
int hours;
int minutes;
int senconds;
public:
Time(int s=0, int m=0, int h=0){
hours=h;
minutes=m;
seconds=s;
}
void show( ){cout<<"时间:"< 60){ temp.senconds = temp.seconds - 60;
if(temp.minutes > 60){ temp.minutes = temp.minutes - 60;
if(temp.hours >=24) temp.hours = temp.hours - 24;
return temp;
}
void main( )
{Time T, T1(20, 23, 21), T2(10, 25, 15), T3(5, 10, 15);
T = T1 + T2;
T.show( );
T = T1 + T3;
T.show( );
}
temp.minutes++; }
temp.hours++;}
2. #include
int Div(int x,int y);
int main()
{
try
{ cout<<"7/2="<
#include
template
void swap(T& x, T& y)
{
T temp;
temp = x;
x = y;
y = temp;
}
void main()
{
int
double
i= 0, j=1;
a=1.25, b=-2.5;
第 - 3 -页共 7页
ch1='A', ch2='B';
char
cout << "\n " << i << '\t' << j;
cout << "\n " << ch1<< '\t' << ch2;
cout << "\n " << a << '\t' << b;
swap(i, j);
swap(a, b);
swap(ch1, ch2);
cout << "\n " << i << '\t' << j;
cout << "\n " << a << '\t' << b;
cout << "\n " << ch1 << '\t' << ch2;
}
4. #include
using namespace std;
class B0
{
public:
virtual void display()=0;
};
class B1: public B0
{
public:
void display(){cout<<"B1::display()"<display();
}
int main()
{
B0 *p;
B1 b1;
D1 d1;
b1.display();
d1.display();
p=&b1;
fun(p);
p=&d1;
fun(p);
return 0;
}
五. 编程题 (共 24 分) (应严格按照题目的要求定义类)
定义一个抽象基类 person 类,里面有一个纯虚函数 print。定义派生类 student, 从 person
类公有派生,私有段有学号 num,名字 name,成绩 score,公有段有构造函数,有 print
函数,能输出学生的名字,学号,成绩等信息。在学生类中再公有派生出 grad_student 研
究生类, 私有段有 thesis,和年龄 age,公有段包括构造函数,print 函数,能显示研究生类
的 thesis 和年龄 age 信息。在主函数中,定义学生类和研究生类对象和指针,通过指针动
态调用相应的 print 函数,输出学生类和研究生类信息。
第 - 4 -页共 7页
答题纸:
第一大题: 1.
2.
3.
4.
第二大题: 1.
10.
2.
3.
5.
4.
6.
5.
第三题:
①
②
③
7.
8.
9.
10.
6.
④
7.
8.
9.
⑤
第四题:
第五题:
第 - 5 -页共 7页
第 - 6 -页共 7页
第 - 7 -页共 7页