考试试题纸(B 卷)
《面向对象程序设计》课程计算机院(系)网络工程、计算机科学与技术班级
考试时量 100分钟学生人数命题教师系主任
交题时间:年月日考试时
间:年月日
1.一、简答题(每小题5分,共20分)
1.什么是类?什么是对象?对象与类的关系是什么?
2.构造函数和析构函数的主要作用是什么?他们各有什么特性?
3.派生类构造函数和析构函数的执行顺序是怎样的?
4.什么是虚函数?虚函数与函数重载有哪些相同点和不同点?
2.二、选择题(每小题2分,共20分)
1.假设已经有定义char *const pName=”Student”;下面的语句正确的是。
A.pName[3]=’t’; B. pName=”score”;
C. pName=new char[5];
D. pName=new char(‘p’);
2.在下面有关对构造函数的描述中,正确的是。
A. 构造函数可以带有返回值
B. 构造函数的名字与类名完全相同
C. 构造函数必须带有参数
4.构造函数必须定义,不能缺省
3.在下面有关析构函数特征的描述中,错误的是。
A. 一个类中只能定义一个析构函数
B. 析构函数名与类名完全相同
C. 析构函数不能指定返回类型
D. 析构函数不能带有参数
4.假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为。
A. 3
B. 4
C. 6
D. 9
5. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成
员函数的声明语句为。
A. AB operator+(AB &a,AB &b)
B. AB operator+(AB &a)
C. operator+(AB a)
D. AB & operator+( )
6. 假设定义了函数模版:
template
T max(T x, T y){ return (x>y)?x:y; }
并定义了:int i;char c;那么下列错误的调用该模版的是。
A.max(i,i); B.max(c,c);
C.max(int(c),i); D.max(c,i);
7.模版的主要用途是为了。
A.提高代码的运行效率
B.实现多态性
C.提高代码的重用性
D.加强类的封装性
8.下列说法错误的是。
A.申明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象
B.允许将一个声明为指向基类的指针指向其公有派生类的对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。
C.声明为指向基类对象的指针,当其指向公有派生类对象时,只能用它来直接访问派生类中从基类继承来的成员,而不能直接访问公有派生类中定义的成员
D.以上说法都不对
9.现有程序如下:
#include
#include
void main(){
int kk=1234;
cout< cout< } 以上程序的运行结果是。 A.1234B. **1234 C.**1234 D.以上都不对 1234 1234**1234 10.在公有继承的情况下,基类成员在派生类中的访问权限。 A.受限制 B. 保持不变 C. 受保护 D. 不受保护 1.三、填空题(每空1分,共10分) 1.假定类AB中有一个公有属性的静态数据成员bb,在类外不通过对象名访问该成员 bb的写法为(1)。 2.通常情况下,当创建派生类对象时,首先执行(2)的构造函数,随后 再执行(3)的构造函数,当撤销派生类对象时,则先执行(4)的析构函数,随后再执行(5)的析构函数。 3.ios类中有几个成员函数可以用来对输入输出进行格式化控制,格式控制主要是通过 对(6)的操作来完成的。 4.所谓赋值兼容规则是指在需要基类对象的任何地方都可以使用(7)来替 代。 5.纯虚函数是一个在基类中说明却没定义的虚函数,但要求在它的派生类中必须定义 自己的版本,或重新说明为纯虚函数。那么,纯虚函数的定义形式为(8)。 6.分别写出类AB的单目运算符”++”的前缀方式和后缀方式的友元函数重载一般形 式:(9)、(10)。 2.四、写出下面程序的运行结果(每小题5分,共20分) 1、#include class Myclass{ public: Myclass(){} Myclass( int a, int b, int c); void GetNumber(); void GetSum(); private: int x,y,z; static int sum; }; int Myclass::sum=0; Myclass::Myclass(int a, int b, int c){ x=a; y=b; z=c; sum+=x+y+z; } void Myclass::GetNumber(){ cout<<"number="< } void Myclass::GetSum(){ cout<<"sum="< } void main(){ Myclass M(3,7,10); M.GetNumber(); M.GetSum(); Myclass N(14,9,11); N.GetNumber(); N.GetSum(); M.GetSum(); } 2、#include class TDate1{ public: TDate1(int y,int m, int d); ~TDate1(); void Print(); private: int year, month,day; }; TDate1::TDate1(int y,int m,int d){ year=y; month=m; day=d; cout<<"contructor called.\n"; } TDate1::~TDate1(){ cout<<"Destructor called.\n"; } void TDate1::Print(){ cout< void main(){ TDate1 today(2005,7,1),tomorrow(2005,7,2); cout<<"today is "; today.Print(); cout<<"tomorrow is "; tomorrow.Print(); } 3、#include class Date{ public: Date() { cout<<"Date called."< } private: unsigned int year, month, day; }; class Employee{ public: Employee() { cout<<"Employee called."< } private: Date birthday; }; class Manager: public Employee{ public: Manager() { cout<<"Manager called."< } private: unsigned int allowance; }; int main(){ Manager susan; return 0; } 4、#include class complex{ public: complex(int r,int i):real(r),imag(i){} friend complex operator++(complex ); friend complex operator--(complex & ); void print(){ cout<<"("< } private: int real,imag; }; complex operator++(complex o){ o.real++; o.imag++; return o; } complex operator--(complex &o){ o.real--; o.imag--; return o; } void main(){ complex obj(10,20),obj_b(30,40); ++obj; obj.print(); --obj_b; obj_b.print(); } 1.五、编程题(每小题10分,共30分) 1、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的对象数组,将qu初始化 为1~5,将price初始化为qu的10倍。显示每个对象的qu*price。 2、编写一个程序,用成员函数重载运算符“+”和“-”将两个二维数组相加和相减,要求第一个二维数组由 构造函数设置,另一个二维数组的值由键盘输入。 3、写一个函数模板,求数组中的最大元素。使得函数调用时,数组类型和返回类型可以是整数也可以是双精度 类型。 注:请打印或用炭素墨水书写、字迹要求工整、并抄写在方框线内共页,第页, 考试试题纸(B 卷) 《面向对象程序设计》课程计算机、网络专业班级 考试时量 100分钟学生人数命题教师系主任 交题时间:年月日考试时 间:年月日 一、简答题(每小题5分,共20分) 1.什么是类?什么是对象?对象与类的关系是什么? 2.构造函数和析构函数的主要作用是什么?他们各有什么特性? 3.派生类构造函数和析构函数的执行顺序是怎样的? 4.什么是虚函数?虚函数与函数重载有哪些相同点和不同点? 二、选择题(每小题2分,共20分) 1.假设已经有定义char *const pName=”Student”;下面的语句正确的是。 A.pName[3]=’t’; B. pName=”score”; C. pName=new char[5]; D. pName=new char(‘p’); 2.在下面有关对构造函数的描述中,正确的是。 A. 构造函数可以带有返回值 B. 构造函数的名字与类名完全相同 C. 构造函数必须带有参数 5.构造函数必须定义,不能缺省 3.在下面有关析构函数特征的描述中,错误的是。 A. 一个类中只能定义一个析构函数 B. 析构函数名与类名完全相同 C. 析构函数不能指定返回类型 D. 析构函数不能带有参数 4.假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为。 A. 3 B. 4 C. 6 D. 9 5. 假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成 员函数的声明语句为。 A. AB operator+(AB &a,AB &b) B. AB operator+(AB &a) C. operator+(AB a) D. AB & operator+( ) 6. 假设定义了函数模版: template T max(T x, T y){ return (x>y)?x:y; } 并定义了:int i;char c;那么下列错误的调用该模版的是。 A.max(i,i); B.max(c,c); C.max(int(c),i); D.max(c,i); 7.模版的主要用途是为了。 A.提高代码的运行效率 B.实现多态性 C.提高代码的重用性 D.加强类的封装性 8.下列说法错误的是。 A.申明为指向基类对象的指针可以指向它的公有派生的对象,但不允许指向它的私有派生的对象 B.允许将一个声明为指向基类的指针指向其公有派生类的对象,但是不能将一个声明为指向派生类对象的指针指向其基类的一个对象。 C.声明为指向基类对象的指针,当其指向公有派生类对象时,只能用它来直接访问派生类中从基类继承来的成员,而不能直接访问公有派生类中定义的成员 D.以上说法都不对 9.现有程序如下: #include #include void main(){ int kk=1234; cout< cout< } 以上程序的运行结果是。 B.1234B. **1234 C.**1234 D.以上都不对 1234 1234**1234 10.在公有继承的情况下,基类成员在派生类中的访问权限。 A.受限制 B. 保持不变 C. 受保护 D. 不受保护 三、填空题(每空1分,共10分) 1.定类AB中有一个公有属性的静态数据成员bb,在类外不通过对象名访问该成员 bb的写法为(1)。 2.通常情况下,当创建派生类对象时,首先执行(2)的构造函数,随后 再执行(3)的构造函数,当撤销派生类对象时,则先执行(4)的析构函数,随后再执行(5)的析构函数。 3.ios类中有几个成员函数可以用来对输入输出进行格式化控制,格式控制主要是通过 对(6)的操作来完成的。 4.所谓赋值兼容规则是指在需要基类对象的任何地方都可以使用(7)来替 代。 5.纯虚函数是一个在基类中说明却没定义的虚函数,但要求在它的派生类中必须定义 自己的版本,或重新说明为纯虚函数。那么,纯虚函数的定义形式为(8)。 6.分别写出类AB的单目运算符”++”的前缀方式和后缀方式的友元函数重载一般形 式:(9)、(10)。 四、写出下面程序的运行结果(第1小题6分,第2、3小题7分,共20分) 1、#include class Myclass{ public: Myclass(){} Myclass( int a, int b, int c); void GetNumber(); void GetSum(); private: int x,y,z; static int sum; }; int Myclass::sum=0; Myclass::Myclass(int a, int b, int c){ x=a; y=b; z=c; sum+=x+y+z; } void Myclass::GetNumber(){ cout<<"number="< void Myclass::GetSum(){ cout<<"sum="< } void main(){ Myclass M(3,7,10); M.GetNumber(); M.GetSum(); Myclass N(14,9,11); N.GetNumber(); N.GetSum(); M.GetSum(); } 2、#include class TDate1{ public: TDate1(int y,int m, int d); ~TDate1(); void Print(); private: int year, month,day; }; TDate1::TDate1(int y,int m,int d){ year=y; month=m; day=d; cout<<"contructor called.\n"; } TDate1::~TDate1(){ cout<<"Destructor called.\n"; } void TDate1::Print(){ cout< void main(){ TDate1 today(2005,7,1),tomorrow(2005,7,2); cout<<"today is "; today.Print(); cout<<"tomorrow is "; tomorrow.Print(); } 3、#include class Date{ public: Date() { cout<<"Date called."< } private: unsigned int year, month, day; }; class Employee{ public: Employee() { cout<<"Employee called."< } private: Date birthday; }; class Manager: public Employee{ public: Manager() { cout<<"Manager called."< } private: unsigned int allowance; }; int main(){ Manager susan; return 0; } 五、编程题(每小题15分,共30分) 1、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的对象数组,将qu初始化 为1~5,将price初始化为qu的10倍。显示每个对象的qu*price。 2、编写一个程序,用成员函数重载运算符“+”和“-”将两个二维数组相加和相减,要求第一个二维数组由 构造函数设置,另一个二维数组的值由键盘输入。 注:请用炭素墨水书写、字迹要求工整、并抄写在方框线内共页,第页, 考试试题参考答案及评分细则 《面向对象程序设计》课程(B卷)计算机院(系)网络工程、计算机班级 应试学生人数实际考试学生人数考试时量 100分钟 命题教师审核人:考试时间:年月日 1.一、简答题(每小题5分,共20分) 1.答:类就是相同的数据和相同的一组对象的集合,即,类是对具有相同数据结构和相同操作的一类对象的描述;对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,对象可以认为是:数据+操作;类和对象之间的关系是抽象和具体的关系。 2.答:构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:(1)构造函数的名字必须与类名相同(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。 析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;(3)当撤消对象时,编译系统会自动地调用析构函数。 3.答:略.详见教材P151. 4.答:略. 详见教材P192. 1.二、选择题(每小题2分,共20分) 1~10.A B B B B C C D B B 1.三、填空题(每空1分,共10分) (1)AB::bb (2)基类(3)派生类(4)派生类(5)基类(6)状态标志字(7)公有派生类对象(8)virtual 函数类型函数名(参数表)=0; (9)AB operator++(); (10)AB operator++(int); 1.四、写出下面程序的运行结果(每小题5分,共20分) 1.number=3,7,10 sum=20 number=14,9,11 sum=54 sum=54 2.contructor called. contructor called. today is 2005.7.1 tomorrow is 2005.7.2 Destructor called. Destructor called. 3.Date called. Employee called. Manager called. 4.(10,20) (29,39) 1.五、编程题(每小题10分,共30分) 略. 注:请用炭素墨水书写、字迹要求工整、并抄写在方框线内共页,第页, 考试试题参考答案及评分细则 《面向对象程序设计》课程(B卷)计算机、网络专业班级 应试学生人数实际考试学生人数考试时量100 分钟 命题教师审核人:考试时间:年月日 一、简答题(每小题5分,共20分) 1.答:类就是相同的数据和相同的一组对象的集合,即,类是对具有相同数据结构和相同操作的一类对象的描述;对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,对象可以认为是:数据+操作;类和对象之间的关系是抽象和具体的关系。 2.答:构造函数主要用于为对象分配空间,进行初始化。构造函数除了具有一般成员函数的特征外,还具有一些特殊的性质:(1)构造函数的名字必须与类名相同(2)构造函数可以有任意类型的参数,但不能指定返回类型。它有隐含的返回值,该值由系统内部使用。(3)构造函数是特殊的成员函数,函数体可写在类体内,也可写在类体外。(4)构造函数可以重载,即一个类中可以定义多个参数个数或参数类型不同的构造函数。(5)构造函数被声明为公有函数,但它不能像其他成员函数那样被显式地调用,它是在定义对象的同时被调用的。 析构函数也是一种特殊的成员函数。它执行与构造函数相反的操作,通常用于撤消对象时的一些清理任务,如释放分配给对象的内存空间等。析构函数有以下一些特点:(1)析构函数与构造函数名字相同,但它前面必须加一个波浪号(~);(2)析构函数没有参数,也没有返回值,而且不能重载。因此在一个类中只能有一个析构函数;(3)当撤消对象时,编译系统会自动地调用析构函数。 3.答:略.详见教材P151. 4.答:略. 详见教材P192. 二、选择题(每小题2分,共20分) 1~10.A B B B B C C D B B 三、填空题(每空1分,共10分) (1)AB::bb (2)基类(3)派生类(4)派生类(5)基类(6)状态标志字(7)公有派生类对象(8)virtual 函数类型函数名(参数表)=0; (9)AB operator++(); (10)AB operator++(int); 四、写出下面程序的运行结果(第1小题6分,第2、3小题7分,共20分) 1.number=3,7,10 sum=20 number=14,9,11 sum=54 sum=54 2.contructor called. contructor called. today is 2005.7.1 tomorrow is 2005.7.2 Destructor called. Destructor called. 3.Date called. Employee called. Manager called. 五、编程题(每小题15分,共30分) 略. 注:请用炭素墨水书写、字迹要求工整、并抄写在方框线内共页,第页,第一部分选择题(共20分) 一、单项选择题(本大题共10小题,每小题2分,共20分) 1.在C++中,函数原型不能标识( D ) A.函数的返回类型 B.函数参数的个数 C.函数参数类型 D.函数的功能p108有叙述 2.在C++程序中,对象之间的相互通信通过( B ) ? A.继承实现 B.调用成员函数实现 C.封装实现 D.函数重载实现 3.对于任意一个类,析构函数的个数最多为( B ) A.0 B.1 C.2 D.3 P288 析构函数不接受参数,也不返回数值。类只可能有一个析构函数,不能进行析构函数的重载。 4.下面函数模板定义中不正确的是( A ) A.template B.template QF(Q x){ QF(Q x){ return Q+x; return x+x; } } C.template D.template TF(T x){ TF(T x){ return x*x; return x>1; } } 5.友元关系不能( c A )? A.继承 B.是类与类的关系 C.是一个类的成员函数与另一个类的关系p316 D.提高程序的运行效率 6.语句ofstream f(〃SALARY.DAT〃,ios::app|ios::binary);的功能是建立流对象f,试图打开文件SALARY.DAT并与之连接,并且( A ) A.若文件存在,将文件写指针定位于文件尾;若文件不存在,建立一个新文件 B.若文件存在,将其置为空文件;若文件不存在,打开失败 C.若文件存在,将文件写指针定位于文件首;若文件不存在,建立一个新文件 D.若文件存在,打开失败;若文件不存在,建立一个新文件 7.下面说法正确的是( B ) A.内联函数在运行时是将该函数的目标代码插入每个调用该函数的地方 B.内联函数在编译时是将该函数的目标代码插入每个调用该函数的地方 C.类的内联函数必须在类体内定义 D.类的内联函数必须在类体外通过加关键字inline定义 8.可以用p.a的形式访问派生类对象p的基类成员a,其中a是( D ) A.私有继承的公有成员 B.公有继承的私有成员 C.公有继承的保护成员 D.公有继承的公有成员 9.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( A ) 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〃< virtual void func2( ){cout<<〃class B func 2〃< }; 下面正确的叙述是( C ) A. A::func2( )和B::func1( )都是虚函数 B. A::func2( )和B::func1( )都不是虚函数 C. B::func1( )是虚函数,而A::func2( )不是虚函数 D. B::func1( )不是虚函数,而A::func2( )是虚函数 第二部分非选择题(共80分) 二、填空题(本大题共10小题,每小题2分,共20分) 11.定义类的动态对象数组时,系统只能够自动调用该类的拷贝构造函数对其进行初始化。 12.无论是什么继承方式,派生类的成员不能访问基类private属性的成员。 13.表达式cout< 14.基类的公有成员在派生类中的访问权限由继承方式决定。 15.C++支持的两种多态性分别是静态多态性和动态多态性。 16.C++中语句const char * const p=〃hello〃;所定义的指针p和它所指的内容都不能被修改。 17.假定AB为一个类,则语句AB(AB&x);为该类_构造?_函数的原型说明。 18.说明常成员函数时,字const写在成员函数的函数的参数表和函数体之间 19.在C++中,访问一个对象的成员所用的运算符是指针,访问一个指针所指向的对象的成员所用的运算符是this指针。 20.派生类从一个或多个以前定义的该类的基类继承数据和函数。 三、改错题(本大题共5小题,每小题2分,共10分) 21.指出下面程序段中的错误,并说明出错原因。 class A{ int a,b; public: A(int aa,int bb) {a=aa;b=bb;} }; A x(2,3),y(4); y(4,0) 22.指出并改正下面利用类模板的对象定义中的错误。 template class Tany{ T x,y; public: Tany(T a,T b){x=a,y=b;} T sum( ){return x+y;} }; Tany (int) obj(10,100); 改为Tany class one{ private: int a; public: void func(two&); void func(two &)错误,不能前向申明 }; class two{ private: int b; friend void one::func(two&); }; void one::func(two& r) { a=r.b; } 24.指出下面程序段中的错误,并说明出错原因。 #include class A{ public: void fun( ){cout<<〃a.fun〃< }; class B{ public: void fun( ){cout<<〃b.fun〃< void gun( ){cout<<〃b.gun〃< }; class C:public A,public B{ private:int b; public:void gun( ){cout<<〃c.gun〃< void hun( ){fun( );} 改为void hun( ){A:fun( );}或B:fun( ) }; 25.指出下面程序段中的错误,并说明出错原因。 class Location { int X,Y=20; Y=20出错,类定义中不能显式地将类的数据成员初始化 protected: int zeroX,zeroY; int SetZero(int ZeroX,int ZeroY); private: int length,height; public: float radius; void init(int initX,int initY); int GetX( ); int GetY( ); }; 四、完成程序题(本大题共5小题,共20分) 根据题目要求,完成程序填空。 26.在下面横线处填上适当字句,完成类中成员函数的定义。 class A{ int * a; public: A(int aa=0) { a=_new int(aa)_;//用aa初始化a所指向的动态对象 } ~A(){_delete a_;}//释放动态存储空间 }; 27.下面是一个函数模板,用于计算两个向量的和。在下面横线处填上适当字句,完成函数模板定义。 #include template T* f(T* a,T* b,int n) { T* c=_new T[n]___; for(int i=0;i c〔i〕=_a[i]+b[i] __; return c; } void main() { int a〔5〕={1,2,3,4,5},b〔5〕={10,20,30,40},*p; p=f(a,b,5); for(int i=0;i<5;i++) cout< } 28.下面是一个用户口令检查程序,在横线处填上适当语句完成程序功能。 #include #include _char* PASS=”wolleh”;__//定义由PASS指针所指向的口令wolleh。 void main() char user〔10〕;//用于存放输入的口令 cout<<〃please input your password:〃< __cin>>user;_//输入口令 if((strcmp(user,PASS))==0) cout<<〃your password is correct〃< else cout<<〃your password is error〃< } 29.下面是类fraction(分数)的定义,其中重载的运算符<<以分数形式输出结果,例如将三分之二输出为2/3。在横线处填上适当字句。 class fraction{ int den; //分子 int num; //分母 friend ostream& operator<<(ostream&,fraction); … }; ostream& operator <<(ostream& os,fraction fr){ _cout< return ___os______; } 30.在下面程序横线处填上适当的字句,使其输出结果为0,56,56。 #include class base{ public: ____int__func( ){return 0;} }; class derived:public base{ public: int a,b,c; ____void_____ setValue(int x,int y,int z){a=x;b=y;c=z;} int func( ){return(a+b)*c;} }; void main() { base b; derived d; cout< d.setValue(3,5,7); cout< base& pb=d; cout< 《面向对象程序设计C++》期末考试试卷(B) 一、单项选择题(每小题2分,共40分) 1、关于C++与C语言关系的描述中,()是错误的。 A.C语言是C++语言的一个子集B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进D.C++语言和C语言都是面向对象的 2、已知:int m=10; 下列表示引用的方法中,()是正确的。 A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m; 3、考虑下面的函数原型声明:void testDefaulParam(int a,int b=7,char z='*'); 下面函数调用中,不合法的是()。 A.testDefaulParam(5); B.testDefaulParam(5,8); C.testDefaulParam(5,'#'); D.testDefaulParam(0,0,'*'); 4、系统在调用重载函数时往往根据一些条件确定哪个重载函数被调用,在下列选项中,不能作为依据的是()。 A.函数的返回值类型B.参数的类型C.函数名称D.参数个数 5、下列有关C++类的说法中,不正确的是()。 A.类是一种用户自定义的数据类型 B.只有类中的成员函数或类的友元函数才能存取类中的私有成员 C.在类中,如果不做特别说明,所有成员的访问权限均为私有的 D.在类中,如果不做特别说明,所有成员的访问权限均为公用的 6、已知X类,则当程序执行到语句X array[3];时,调用了()次构造函数。 A.0 B.1 C.2 D.3 7、有关析构函数的说法,不正确的是()。 A.析构函数有且仅有一个 B.析构函数和构造函数一样可以有形参 C.析构函数的功能是在系统释放对象之前作一些内存清理工作 D.析构函数无任何函数类型 一、填空题(每空1分,共14分) 1、观看以下程序: class point{ public: void show() {cout<<”point”< (A)指针(B)引用(C)枚举(D)结构 3、类成员的访问权限中,()只能被本类的成员函数和其友元函数访问。 (A)share (B)public (C)private (D)protected 4、关于构造函数,下列说法不正确的是()。 (A)构造函数名字和类名相同 (B)构造函数在创建对象时自动执行 (C)构造函数无任何函数返回类型 (D)构造函数有且只有一个 5、派生类可以访问其基类的()。 (A)公有成员(B)保护成员 (C)私有派生(D)公有和保护成员 6、下列关于运算符重载的描述中,错误的是()。 (A)运算符重载不可以改变操作数的个数 (B)运算符重载不可以改变运算符的功能 (C)运算符重载不可以改变结合方向 (D)运算符重载不可以改变运算优先级 7、C++语言是从早期的C语言逐渐发展演变而来的.与C语言相比,它在求解问题方法上进行的最大改进是() (A)面向过程(B)面向对象(C)安全性(D)复用性 8、对于类中定义的成员,其隐含访问权限为()。 A.public B.protected C.private D.static 9、下面有关重载函数的说法中正确的是() (A)重载函数必须具有不同的返回值类型;(B)重载函数形参个数必须不同; (C)重载函数必须有不同的形参列表(D)重载函数名可以不同; 10、有如下的对类“CSample”的说明,其中()是错误的。 class CSample { A.int a=23; B.CSample(); public: C.CSample(int val); D.~ CSample(); 11、在int a=3,int *p=&a;中,*p的值是( ) A.变量a的地址值 B.无意义 C.变量p的地址值 D.3 12、每个类()构造函数。 (A)只能有一个(B)只可有公有的 1 什么是面向对象程序设计,它与传统的结构式程序有什么不同。 面向对象程序设计是一种适用于设计、开发各类软件的范型。它是将软件看成是一个由对象组成的社会:这些对象具有足够的智能,能理解从其他对象接受的信息,并以适当的行为作出响应;允许低层对象从高层对象继承属性和行为。通过这样的设计思想和方法,将所模拟的现实世界中的事物直接映射到软件系统的解空间。 与传统的结构式程序设计相比,面向对象程序设计吸取了结构式程序设计的一切优点(自顶向下、逐步求精的设计原则)。而二者之间的最大差别表现在: ·面向对象程序采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结构式程序由于数据和过程分离引起的弊病。 · 面向对象程序是由类定义、对象(类实例)和对象之间的动态联系组成的。而结构式程序是由结构化的数据、过程的定义以及调用过程处理相应的数据组成的 2 用面向对象方法建立模型的思维过程是怎样的。 用面向对象方法建立拟建系统的模型的过程就是从被模拟现实世界的感性具体中抽象要解决的问题概念的过程。这种抽象过程分为知性思维和具体思维两个阶段,其中:·知性思维是从感性材料中分解对象,抽象出一般规定,形成了对对象的普遍认识。·具体思维是从知性思维得到出的一般规定中揭示的事物的深刻本质和规律,其目的是把握具体对象的多样性的统一和不同规定的综合。 3 解释以下概念: ①对象:在现实世界中,对象就是可以感觉到的实体。每个对象具有一个特定的名字以 区别于其他对象;具有一组状态用来描述它的某些特性;具有一组操作,每一个操作决定对象的一种功能或行为(为自身服务的操作和为其他对象提供服务的操作)。而在面向对象系统中,对象是可以标识的存储区域。每个对象的状态被保存在此区域中,而实现一类对象行为的操作(代码)被保存在另外相关的存储器区域中。 ②消息:消息是要求某个对象执行其某种功能操作(方法)的规格说明。因此,消息是 由消息的接收者、消息要求提供的操作(消息名)和必要的参数组成的。 ③类:在现实世界中,类是对一组具有共同特性(属性和行为)的客观对象的抽象。而 在面向对象系统中,类是由程序员自定义的具有特定结构和功能的类型,是一种代码共享的手段。 ④实例:任何一个对象都是该对象所属类的一个具体实例。 ⑤公有消息:是由对象外向对象发送的消息,用于激活该对象的某种方法。 ⑥私有消息:是由对象向自身发送的消息,用于内部操作;该类消息不能从对象外向该 对象发送。 ⑦消息序列:在面向对象系统中一个事件的发生总会有多个对象的多次相互作用才能完 成,使得这些对象能够相互作用的消息组成的序列被称为消息序列。 4 类与实例的关系如何? 类是创建对象的模板,而对象是实现类的实例。属于同一类的不同实例必须具有: ·相同的操作集合; ·相同的静态属性集合; ·不同的对象名和属性动态值。 精选考试类文档,如果您需要使用本文档,请点击下载! 祝同学们考得一个好成绩,心想事成,万事如意! 大学C语言考试试题及答案 姓名成绩 温馨提示:同学们,经过培训学习,你一定积累了很多知识,现在请认真、仔细地完成这张试题吧。加油! 一单项选择题 1. 在C语言中,以 D 作为字符串结束标志 A)’\n’ B)’ ’ C) ’0’ D)’\0’ 2.下列数据中属于“字符串常量”的是( A )。 A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串 在C语言中,用单引号标识字符;用双引号标识字符串 选项B,C,分别用{}和’’标识字符串 选项D,标识字符。 3、以下说法中正确的是( C )。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是( B )。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C )。 A.-a1 B.a[i] C.a2_i D.int t 6.下列C语言用户标识符中合法的是( B )。 A)3ax B)x C)case D)-e2 E)union 7.下列四组选项中,正确的C语言标识符是( C )。 A) %x B) a+b C) a123 D) 123 8、下列四组字符串中都可以用作C语言程序中的标识符的是( A )。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 9.C语言中的简单数据类型包括(D )。 A、整型、实型、逻辑型 B、整型、实型、逻辑型、字符型 C、整型、字符型、逻辑型 D、整型、实型、字符型 10.在C语言程序中,表达式5%2的结果是 C 。 A)2.5 B)2 C)1 D)3 11.如果int a=3,b=4;则条件表达式"a《面向对象程序设计C 》期末试卷及标准答案
c面向对象程序设计试题和答案(经典题目)
什么是面向对象程序设计
大学C语言考试试题及答案
《面向对象程序设计》答案