2021年面向对象程序设计资料
- 格式:doc
- 大小:44.50 KB
- 文档页数:14
静态数据成员不是类所有对象共享的。
选择一项:对错试题2未作答满分1.00未标记标记试题试题正文类模板中的成员函数没有返回值。
选择一项:对错试题3未作答满分1.00未标记标记试题试题正文类模板的主要作用是生成抽象类。
选择一项:对错试题4未作答满分1.00未标记标记试题试题正文静态数据成员的声明以关键字static开头。
选择一项:对错试题5未作答满分1.00未标记标记试题试题正文继承描述类的层次关系,派生类可以具有与基类相同的属性和方法。
选择一项:对错试题6未作答满分1.00未标记标记试题试题正文系统在调用重载函数时,不能作为确定哪个重载函数被调用的依据是:()选择一项:参数类型b.函数的返回值类型参数个数d.函数名称试题7未作答满分1.00未标记标记试题试题正文已知X类,则当程序执行到语句:Xarray⑶;时,调用了()次构造函数。
选择一项:a.b.23d.1试题8未作答满分1.00未标记标记试题试题正文定义析构函数时,应该注意:()选择一项:其名与类名完全相同b.无形参,也不可重载返回类型是void类型d.函数体中必须有delete语句试题9未作答满分1.00未标记标记试题试题正文对于语句cout<选择一项:“endl”的作用是输出回车换行b.“<<”称作提取运算符(插入运算符),&,,是一个变量d.“cout”是一个输出流对象试题10未作答满分1.00未标记标记试题试题正文己知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的。
选择一项:a.void print() constb.const void print()void print(const)d.void const print()试题11未作答满分1.00未标记标记试题试题正文虚函数的定义是在基类中进行的,定义时需要冠以关键字彩蛋选择一项:a.staticb.frendc.publicd.virtual试题12未作答满分1.00未标记标记试题试题正文若数组名作实参而指针变量作形参,函数调用时实参传给形参的是彩蛋选择一项:a.数组的长度b.数组第一个元素的值c.数组所有元素的值d.数组第一个元素的地址试题13未作答满分1.00未标记标记试题试题正文设置虚基类的目的是()选择一项:a.提高运行效率b.消除二义性c.简化程序d.减少目标代码试题14未作答满分1.00未标记标记试题试题正文已知:intm=10;下列表示引用的方法中,()是正确的。
面向对象程序设计 - 复习提纲 - 2021-2021一、填空题1.c++中变量按照作用范围可分为局部变量和全局变量。
2.动态联编支持的多态性称为运行时的多态性,也称为动态多态性。
3.在一个函数的定义或声明前加上关键字inline时,该函数就声明为内联函数。
4.在类中定义和实现的函数称为成员函数。
5.程序中可以有多个名称相同,但参数类型不同或个数不同或类型与个数都不同的函数,这种现象称为函数重载。
6.若定义int a[][4]={1,2,3,4,5,6,7,8,9},则数组a的第一维的大小是3 。
7.设置虚基类使用的关键字为virtual。
8.基类的构造函数和析构函数,不能被派生类继承。
9.含有纯虚函数的类称为抽象类,它不能定义对象,主要用作基类。
10.动态联编支持的多态性称为运行时的多态性。
11.运算符重载函数的两种主要形式有成员函数和友元函数。
12.使用模板是为了提高代码的可重用性。
13.在C++语言中,变量按照生存周期分为静态存储类别变量和自动存储类别变量。
14.非成员函数应声明为类的友元函数,才能访问该类的private成员。
15.在类中,数据成员和成员函数的默认访问属性是private(或私有的)。
16.如果一个类至少有一个纯虚函数,那么该类被称为抽象类。
17.对于含有对象成员的派生类,其构造函数的执行顺序为:先执行基类的构造函数、再执行对象成员所属类的构造函数,最后执行派生类的构造函数。
18.构造函数是一种特殊的成员函数,其作用是对类的数据成员进行初始化并执行对象的其他内部管理操作。
19.静态成员函数不能直接引用类中说明的非静态成员。
20.对于含有对象成员的派生类,其析构函数的执行顺序为:先派生类的析构函数、再执行对象成员所属类的析构函数,最后执行基类的析构造函数。
21.设置友元函数的目的是为能够访问该类的私有成员。
22.运算符重载仍然保持原来的优先级、结合性和语法结构。
一.单选题(共60题,72.0分)1队列的最大特征是( )。
A、先进先出B、后进先出C、自动排序D、大数优先正确答案: A 我的答案:A得分: 1.2分答案解析:2若有说明:int *p1,*p2,m=5,n;以下均是正确赋值语句的是( )A、p1=&m,p2=&p1B、p1=&m;p2=&n;*p1=*p2C、p1=&m;p1=p2D、p1=&m;*p2=*p1正确答案: B 我的答案:B得分: 1.2分答案解析:3一个类如果没有定义任何函数,编译器不会自动为这个类产生( )。
A、拷贝构造函数B、无参构造函数C、输出流运算符D、赋值运算符正确答案: C 我的答案:C得分: 1.2分答案解析:4有如下类定义:class MyClass{int value;public:MyClass(int n): value (n) {}int gerValue()const{ return value;}};则类 MyClass 的构造函数的个数是A、1 个B、2 个C、3 个D、4 个正确答案: A 我的答案:A得分: 1.2分答案解析:5当需要使用istrstream流类定义一个流类对象并联系一个字符串时,应在文件开始使用#include命令,使之包含( )文件A、iostream、hB、iomanip、hC、fstream、hD、ststrea、h正确答案: A 我的答案:A 得分: 1.2分答案解析:6多态性是通过( )实现的。
A、构造函数B、析构函数C、虚函数D、函数重载正确答案: C 我的答案:C 得分: 1.2分答案解析:7用cin为整型变量输入数据时,如果从键盘输入的不是数字,输入后整型变量中的结果会是:( )A、B、负数C、正数D、不确定正确答案: D 我的答案:D得分: 1.2分答案解析:8若k为整形,则while循环执行( )次。
k=2; while(k==0) printf(“%d”,k); k--; printf(“\n”);A、10B、9C、D、1正确答案: C 我的答案:C得分: 1.2分答案解析:9在下列关键字中,不能用来表示继承方式的是 ( )A、privateB、staticC、publicD、protected正确答案: B 我的答案:B得分: 1.2分答案解析:10程序运行中需要从键盘上输入多于一个数据时,各数据之间应该使用( )符号作为分隔符。
广州大学~ 年第一学期考试卷课程面向对象程序设计考试形式(闭卷,考试)学院系专业班级学号姓名一、填空题(20分)1、__ ___是特殊成员函数,在对象作用域结束时自动调用。
2、友元关系是非传递和_ ____,除非特别声明,否则,普通状况下若F是A友元,A__ ___F友元。
3、运算符函数既可以重载为_ __函数,也可以重载为友元函数。
4、在具备继承关系类层次构造中,构造函数执行顺序是:___、_ _ _、。
5、具备纯虚函数类称为__ ___。
6、Windows应用程序主窗口普通都是_ _类派生类,而窗口函数则被封装到_ __类中。
7、MFC是用消息映射表来实现消息与 ___之间映射,MFC通过_ __ __个宏来声明和实现消息映射表。
8、MFC采用构造来实现数据和数据显示分离。
应用程序数据是由文档类_ _对象来存储和管理。
9、CPaintDC是_ __类中最惯用派生类,它只能使用在_ __类OnDraw函数中。
10、消息消息响应函数函数名为OnMouseMove。
11、是供Windows应用程序使用特殊数据,它们驻留在硬盘上可执行文献中。
惯用资源有、快捷键、图标、位图等。
12、_ ___就是指应用程序把数据对象以文献形式写入永久性存储体后,应用程序还能从永久性存储体来读取它,并且可以根据该文献在内存中重新创立该对象机制。
二、简述题(20分,每题5分)(1)Windows应用程序主函数有哪3个重要任务?什么是消息循环?(2)简述文档/视图构造中文档类和视图类作用。
并阐明在文档/视图构造应用程序中,视图类对象是如何来获取文档类对象中数据。
(3)应用程序界面有哪三种方式?分别阐明该界面应用程序外观。
(4)鼠标消息分为哪两类?它们之间有什么区别?三、阅读下列程序,写出执行成果。
(40分,每题5分)1、#include<iostream.h>class counter{ public :void setnum ( int i ) { num = i ;}void shownum ( ) { cout << num << '\t' ;}static int num ;} ;int counter ::num = 1 ;void main(){ int i ;for( i = 0 ;i < 5 ;i ++ ){ counter::num += i ;cout << counter::num << '\t' ; } cout<<endl;}2、#include <iostream.h>class A{public:A(){a=5;}void printa(){cout<<"A:a="<<a<<endl;} private:int a;friend class B;};class B{public:void display1(A t){t.a++;cout<<"display1:a="<<t.a<<endl;}void display2(A t){t.a--;cout<<"display2:a="<<t.a<<endl;} };void main(){ A obj1;B obj2;obj1.printa();obj2.display1(obj1);obj2.display2(obj1);obj1.printa();}3、#include <iostream.h>template <typename T>class base{public:base(T i,T j){x=i;y=j;}T sum(){return x+y;}private:T x,y;};void main( ){ base <double> obj2(3.3,5.5);cout<<obj2.sum()<<endl;base <int> obj1(3,5);cout<<obj1.sum()<<endl;}4、#include<iostream.h>class Base{ public:void abc(){cout<<"Base class"<<endl;};};class Derived1:public Base{ public:void abc(){cout<<"Derived1 class"<<endl;};};class Derived2:public Base{ public:void abc(){cout<<"Derived2 class"<<endl;};};void main(){ Base obj1,*p;Derived1 obj2;Derived2 obj3;p=&obj1;p->abc();p=&obj2;p->abc();p=&obj3;p->abc();obj1.abc(); obj2.abc(); obj3.abc();}5、#include <iostream.h>class parent_class{ int private1 ,private2 ;public :parent_class ( int p1 ,int p2 ){ private1 = p1;private2 = p2;}int inc1 (){ return ++ private1;}int inc2 (){ return ++ private2 ;}void display (){cout << "private1=" << private1 << " ,private2=" << private2 << endl ;}};class derived_class :private parent_class{ int private3 ;parent_class private4 ;public:derived_class ( int p1 ,int p2 ,int p3 ,int p4 ,int p5 ):parent_class ( p1 ,p2 ) ,private4 ( p3 ,p4 ){ private3 = p5 ;}int inc1 ( ){ return parent_class ::inc1 ( ) ;}int inc3 ( ){ return ++ private3 ;}void display ( ){ parent_class ::display ( ) ; private4.display ( ) ;cout << "private3=" << private3 << endl ;}} ;void main ( ){ derived_class d1 ( 17 ,18 ,1 ,2 ,-5 ) ;d1 . inc1 ( ) ;d1 . display ( ) ;}6、#include<iostream.h>class A{ public :A(int n) {i=n ;cout<<“初始化i值为:”<<get_i()<<’\n’;}~A() {cout<<“释放A对象。
”<<’\n’;}int get_i () {return i ;}private :int i ;} ;class B :public A{ public :B(int n,int m) :A(n){ j=m ;cou t<<“初始化j值为:”<<get_j()<<’\n’;}~B(){ cout<<“释放B对象。
”<<’\n’ ;}int get_j () { return j ;}private :int j ;} ;void main(){B obj (1,2) ;cout<<“创立了一种B对象。
值为:”<<obj.get_i()<<“ ”<<obj.get_j()<<’\n’ ; }7、#include<iostream.h>class A{ public:virtual void act1();void act2() {act1();}};void A::act1(){ cout<<"A::act1() called. "<<endl;}class B :public A{ public:void act1();};void B::act1(){ cout<<"B::act1() called. "<<endl;}void main(){ B b;b.act2();}8、指出下列程序中错误,并阐明理由class COMPLEX{ public :COMPLEX(double r=0,double i=0) ;COMPLEX operator-(const COMPLEX & other) ;COMPLEX operator=(const COMPLEX & other) ;private :double real=0,image=0 ;};void main(){ float x ;COMPLEX y (10,20),z (2,3),sum ;sum= x-y ;sum=sum-z ;sum-- ;四、编程题:(20分,每题10分)1.使用虚函数编程求球体和圆柱体体积及表面积。
由于球体和圆柱体都可以看作由圆继承而来,因此可以定义圆类circle 作为基类。
在circle 类中定义一种数据成员radius 和两个虚函数area( ) 和volume( ) 。
由circle 类派生sphere 类和column 类。
在派生类中对虚函数area( ) 和vlume( ) 重新定义,分别求球体和圆柱体体积及表面积。