
课程名称: 程序设计基础(二) 适用专业年级: 2008级计算机科学与技术、软件、网络
考生学号: 考 生 姓 名:
………………………………………………………………………………………………………………………
一、单项选择题(每题1分,共15分)
1、关于继承和封装说法正确的是( ) 。
A)封装就是完全封闭,外部只能通过接口实现互连 B)继承是封装的基础
C)封装是继承的基础
D)子类可只继承父类的部分可继承行为和属性,也可全部继承,就像儿子可继承父亲的部分性格一样
2、关于结构体、共用体及类的说法正确的是( ) 。
A)结构体、共用体没有什么不同,都是把不同或相同类型的数据组织为一体
B)一般来说,结构体、共用体只有数据成员,没有成员函数
C)结构体、共用体与类相比,都含有数据成员的成员函数,只是前者是专为面向过程的程序设计的,后者为面向对象的程序设计的
D)类可只含数据成员或成员函数,不影响使用
3、假设person是一个类,p1是该类的一个对象,p2是一个指向p1的指针,getname()是其中的一个函数,则下面对象的使用不正确的是( ) 。
A)person.getname( ) B)p1.getname( ) C)p1.person::getname( ) D)p2->getname( )
4、关于构造函数的说法,正确的是( ) 。
A)构造函数用于代替类中的一个成员函数来在创建对象时给对象赋初值(通常是成员变量),它是由人工设计的,因此可以在任何时候、任何地方来调用它
B)构造函数的名字与类名相同,因此同类的不同对象的构造函数是相同的
C)构造函数的参数多少没有定制,它的返回值的类型为vois型
D)构造函数的名字与类名相同,因此一个类只有一个构造函数,即构造函数不可重载
5、关于析构函数的说法,正确的是( ) 。
A)析构函数用来释放构造函数为对象分配的内存空间。它可以被用户调用,也可以被系统调用
B)析构函数没有数据类型,其返回值为隐含型
C)析构函数可以没有参数,也可以有多个参数
D)析构函数与构造函数不一样,它可以有多个,以方便使用
6、关于成员函数的重载,说法正确的是( ) 。
A)就是在类中设计多个函数名相同,参数个数及类型也相同的函数
B)析构函数可以重载
C)函数重载,要求函数名相同,但参数个数不同或参数个数相同但其类型不同
D)构造函数不可重载
7、假设person是一个类,p、q是它的不同对象,有函数person f(person &x),下列过程中没有调用拷贝构造函数的是( ) 。
A)person p(q); B)person p=q; C)q=f(p); D)person p(10)
8、关于友元函数的说法正确的是( ) 。
A)友元函数可以是任何类中的一个函数
B)如果函数在被说明为友元函数的类中定义,则它就是该类的成员函数
C)不属于任何类的函数不可以被说明为友元函数
D)使用友元函数的主要目的是提高程序执行效率,因为它可以直接调用该类的私有变量。
9、关于静态数据成员的说法正确的是( ) 。
A)静态数据成员虽然能实现同类的对象共享数据,但破坏了类的封装性
B)静态数据成员是所有同类对象共享的数据,它不能具体地属于哪一个对象
C)静态数据成员只在类中说明一次即可
D)若C为一个类,a为它的一个对象
10、关于继承的目的和作用,说法不正确的是( ) 。
A)继承是为了重复利用父类的可用代码,避免重复劳动
B)继承可以增加自己的父类不能实现的功能的代码,使子类的功能更完美,提高程序设计效率
C)子类可以继承父类的函数和数据,以便重复使用
D)子类可以继承父类的所有特性,以便重复使用,这才是继承的目的
11、下列try、catch语句块说法不正确的是( ) 。
A)try语句块出现之前不允许出现catch语句块
B)catch语句块只能跟在try语句块之后,它们之间可以有其他语句
C)try语句块之后可以紧跟多跟catch语句块
D)catch必须有参数
12、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为( ) 。
A)3 B)4 C)6 D)9
13、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:( ) 。
A)AB operator+(AB & a , AB & b) B)AB operator+(AB & a)
C)operator+(AB a) D)AB & operator+( )
14、如果要对AB类中的整型静态变量c赋初值0,则书写语句正确的是( ) 。
A)int c=0; B)static int c=0; C)int AB:: c=0; D)static int AB:: c=0;
15、在进行完任何C++流的操作后,都可以用C++流的有关成员函数检测流的状态;其中只能用于检测输入流状态的操作函数名称是( ) 。
A)fail B)eof C)bad D)good
二、判断题(每题1分,共10分)
1.为了避免派生类catch不能捕获异常,基类catch总是放在派生类catch后。
2.同一类的不同对象占有不同的内存空间。
3.当内联函数被调用时,内联函数的代码在调用处被展开。
4.数据只有在流中从可以被操作。
5.把流分为输入流和输出流是相对文件流的,输出流是数据从文件流向流中,输入流是数据从流中流向内存变量。
6.函数的返回值类型在区别重载函数时起着举足轻重的作用。
7.多重继承往往产生二义性问题,可用成员名限定法来消除。
8.基类构造函数的调用顺序是按基类被继承时声明的顺序从右至左调用。
9.已知:double k=10; 可以用double &p=10; 表示引用。
10.virtual 只用来说明类声明中的原型,不能用在函数实现时。
三、阅读程序,将程序运行结果填写答题册上。(每小题5分,共20分)
1、 #include class B0 { public: virtual void display(){cout<<"B0::display()"< { public: void display() { cout<<"B1::display()"< { public: void display() { cout<<"D1::display()"< { B0 b0, *p; B1 b1; D1 d1; p=&b0; p->display(); p=&b1; p->display(); p=&d1; p->display(); } 2、# include class A { int a; public: A(int aa=0) { a=aa; } ~A() { cout <<"Destructor A!"<}; class B:public A { int b; public: B(int aa=0,int bb=0):A(aa) { b=bb; } ~B() { cout <<"Destructor B!"<}; void main() { B x(5),y(6,7); } 3、# include int a=5; void main() { int a=10,b=20; cout < { int a=0,b=0; for (int i=1; i<6; i++) { a+=i; b+=a; } cout < }
