c面向对象期末复习解析.docx

上传人:b****5 文档编号:11622983 上传时间:2023-03-29 格式:DOCX 页数:12 大小:20.43KB
下载 相关 举报
c面向对象期末复习解析.docx_第1页
第1页 / 共12页
c面向对象期末复习解析.docx_第2页
第2页 / 共12页
c面向对象期末复习解析.docx_第3页
第3页 / 共12页
c面向对象期末复习解析.docx_第4页
第4页 / 共12页
c面向对象期末复习解析.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

c面向对象期末复习解析.docx

《c面向对象期末复习解析.docx》由会员分享,可在线阅读,更多相关《c面向对象期末复习解析.docx(12页珍藏版)》请在冰豆网上搜索。

c面向对象期末复习解析.docx

c面向对象期末复习解析

c++面向对象期末复习

一、题型:

1.单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

每小题2分,共20分)

2.填空题(每小题2分,共22分)

3.给出下列程序运行后的输出结果(每小题8分,共24分)

4.写出下列每个函数的功能(每小题8分,共16分)

5.编写程序(18分)

二、练习题:

-----------------------------------

练习题1:

{一}、单项选择题(在每小题的四个备选答案中,选出一个正确答案,并将正确答案的序号填在题干的括号内。

每小题2分)

1、在每个C++程序中都必须包含有这样一个函数,该函数的函数名为()

A.mainB.MAINC.nameD.function

2、设x和y均为bool量,则x&&y为真的条件是()

A.它们均为真B.其中一个为真C.它们均为假D.其中一个为假

3、下面的哪个保留字不能作为函数的返回类型?

()

A.voidB.intC.newD.long

4、假定a为一个整型数组名,则元素a[4]的字节地址为()

A.a+4B.a+8C.a+16D.a+32

5、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:

()

A.ABoperator+(AB&a,AB&b)B.ABoperator+(AB&a)

C.operator+(ABa)D.AB&operator+()

6.类的析构函数的作用是()

A.一般成员函数B.类的初始化

C.对象的初始化D.撤消对象时所做的清理工作

7.类的析构函数是在()调用的。

A.类创建时B.创建对象时C.删除对象时D.不自动调用

8.在()情况下适宜采用inline定义内联函数。

A.函数体含有循环语句B.函数体含有递归语句

C.函数代码少、频繁调用D.函数代码多、不常调用

9.假定AB为一个类,则执行ABx;语句时将自动调用该类的()

A.有参构造函数B.无参构造函数

C.拷贝构造函数D.赋值构造函数

10.C++语言建立类族是通过()

A.类的嵌套B.类的继承C.虚函数D.抽象类

(二)、填空题(每小题2分)

1、执行“cout<

2、float和double类型的大小分别为和。

3、算术表达式(xy2/3a)+4b-1对应的C++表达式为。

4、关系表达式x+y>5的相反表达式为。

5、假定一个一维数组的定义为“char*a[8];”,则该数组所含元素的个数为,所占存储空间的字节数为。

6、变量分为全局和局部两种,变量没有赋初值时,其值是不确定的。

7、假定a是一个二维数组,则a[i][j]的指针访问方式为。

8、假定一个结构类型定义为“structD{inta;union{intb;doublec;};D*d[2];};”,则该类型的大小为字节。

9、对一个类中的数据成员的初始化可以通过构造函数中的实现,也可以通过构造函数中的实现。

10、假定AB为一个类,则执行“ABa[10];”语句时,系统自动调用该类的构造函数的次数为。

11、假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法为。

(三)、给出下列程序运行后的输出结果(每小题8分)

1、#include

inta=5;

voidmain(){

inta=10,b=20;

cout<

{inta=0,b=0;

for(inti=1;i<6;i++){

a+=i;b+=a;

}

cout<

:

a<

}

cout<

}

2、#include

intLB(int*a,intn){

ints=1;

for(inti=0;i

s*=*a++;

returns;

}

voidmain(){

inta[]={1,2,3,4,5,6,7,8};

intb=LB(a,5)+LB(&a[3],3);

cout<<"b="<

}

3、#include

#include

structWorker{

charname[15];//姓名

intage;//年龄

floatpay;//工资

};

voidmain(){

Workerx;

char*t="liouting";

intd=38;floatf=493;

strcpy(x.name,t);

x.age=d;x.pay=f;

cout<

}

(四)、写出下列每个函数的功能(每小题8分)

1、#include

intSA(inta,intb){

if(a>b)return1;

elseif(a==b)return0;

elsereturn-1;

}

2、structStrNode{

charname[15];//字符串域

StrNode*next;//指针域

};

voidQB(StrNode*&f,intn){

if(n==0){f=NULL;return;}

f=newStrNode;

cin>>f->name;

StrNode*p=f;

while(--n){

p=p->next=newStrNode;

cin>>p->name;

}

p->next=NULL;

}

 

(五)、编写程序

把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a:

xxk1.dat”中。

------------------------------------------

练习题2:

一、选择题(每题2分)

(1)一个函数功能不太复杂但要求被频繁调用,应选用

    A)内联函数       B)重载函数 C)递归函数      D)嵌套函数

(2)为了使类中的某个成员不能被类的对象通过成员操作符访问,则不能把该成员的访问权限定义为

    A)public    B)protected    C)private    D)static

(3)在C++语言程序中,对象之间的相互通信通过

    A)继承实现                      B)调用成员函数实现

    C)封装实现                      D)函数重载实现

(4)类的析构函数是在什么时候调用的?

    A)类创建时     B)创建对象时     C)删除对象时     D)不自动调用

(5)通常拷贝构造函数的参数是

    A)某个对象名                     B)某个对象的成员名

    C)某个对象的引用名               D)某个对象的指针名

(6)下列不是描述类的成员函数的是

    A)构造函数         B)析构函数        C)友元函数    D)拷贝构造函数

(7)继承机制的作用是

    A)信息隐藏         B)数据封装        C)定义新类         D)数据抽象

(8)在C++语言类体系中,不能被派生类继承的有

    A)转换函数         B)构造函数          C)虚函数            D)静态成员函数

(9)对于类定义

         classA{

         public:

                 virtualvoidfuncl(){}

                 voidfunc2(){}

         };

         classB:

publicA

         {

         public:

                 voidfuncl(){cout<<"classBfunc1”;

                 virtualvoidfunc2(){cout<<"classBfunc2";

          };

    下面正确的叙述是

    A)A:

:

func2()和B:

:

funcl()都是虚函数

    B)A:

:

func2()和B:

:

funcl()都不是虚函数

    C)B:

:

funcl()是虚函数,而A:

:

func2()不是虚函数

    D)B:

:

funcl()不是虚函数,而A:

:

func2()是虚函数

(10)下面关于运算符重载的描述错误的是A)运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算符的语法结构

    B)不是所有的运算符都可以进行重载

    C)运算符函数的调用必须使用关键字operator

    D)在C++语言中不可通过运算符重载创造出新的运算符

(11)作用域运算符的功能是()A)给定作用域的大小B)表示作用域的级别C)某个成员是属于哪个类的D)指出作用域的范围

(12)()不是构造函数的特征

A)构造函数可以重载B)构造函数可以设置缺省参数

C)构造函数的函数名和类名相同D)构造函数必须指定类名

(13)关于new运算符的下列描述中,()是错的

A)使用它创建对象时要调用构造函数

B)使用它创建对象数组时必须指定初始值

C)使用它创建对象数组时不能指定初始值

D)使用它创建的对象或对象数组可以使用运算符delete删除

(14)派生类的描述中,()是错的

A)一个派生类可以作为另一个派生类的基类

B)派生类至少有一个基类

C)派生类中继承的基类成员的访问权限在派生类中保持不变

D)派生类的成员除了它自己的成员外,还包含了它的基类的成员

(15)设置虚基类的目的是()。

A)减少目标代码B)提高运行效率C)消除二义性D)简化程序

(16)以下关于虚函数和纯虚函数的说法中,()是不正确的

A)在派生类中虚函数可以不用关键字virtual说明

B)虚函数在派生类中都不需要重定义

C)不能为虚函数定义缺省操作

D)纯虚函数在派生类中可以不重定义

(17)以下关于抽象类的说法中,()是不正确的

A)不可创建抽象类的实例

B)可以声明抽象类的引用

C)抽象类的派生类也是抽象类

D)抽象类的派生类也可以是抽象类

(18)以下关于多态性的说法中,()是不正确的A)每个多态类的基类有一个虚函数表B)多态类的每一个派生类有一个虚函数表C)每个多态类的对象有一个虚表指针D)虚函数调用与this指针无关

(19)C++语言对C语言做了很多改进,C++语言相对于C语言的最根本的变化是

  A)增加了一些新的运算符

  B)允许函数重载,并允许设置缺省参数

  C)规定函数说明符必须用原型

  D)引进了类和对象的概念

(20)在公有派生情况下,有关派生类对象和基类对象的关系,下列叙述不正确的是

  A)派生类的对象可以赋给基类的对象         

  B)派生类的对象可以初始化基类的引用

  C)派生类的对象可以直接访问基类中的成员   

  D)派生类的对象的地址可以赋给指向基类的指针

二、填空题(每空3分)

(1)一个类可以从直接或间接的基类中继承所有属性和方法。

采用这个方法提高了软件的    。

(2)在C++中封装性、继承性和    是面向对象思想的主要特征。

(3)下列for语句的循环次数为    。

    for(inta=0,b=1;b&&a<5;a++);

(4)下面程序的输出结果是    。

     #include

     voidmain()

     {

         inta[6]={1,2,3,4,5,6};

         for(inti=0;i<5;i++)

             cout<

          cout<

      }

(5)C++程序是从    函数开始执行的。

(6)假定A为一个类,则语句A(A&A);为该类    。

(7)派生类构造函数的执行顺序是先执行    的构造函数.然后执行成员对象的构造函数,最后执行    的构造函数。

(8)C++语言提供的基本控制结构可以分为3种类型:

顺序结构、    和循环结构。

(9)继承的方式有公有继承、私有继承和  3种。

 

三、名词解释(每题2.5分)

1.类2.对象

3.封装性4.继承性

 

四、阅读程序并写出结果(每题2分)

1.

#include

     classA

     {

       staticintn;

      public:

          A(){n=1;}

          A(intnum){n=num;}

          voidprint(){cout<

       };

      intA:

:

n=2:

       voidmain()

       {

           Aa,b(3);

           a.print();

           b.pint();

           cout<

        }

2.

#include

     classbase

     {

     public:

         base(){cout<<”0”;}

};

     classbasel:

virtualbase

      }

     public:

         base1(){cout<<”1”;}

      };

      classbase2:

virtualbase

      {

        public:

         base2(){cout<<”2”;}

       };

       classderived:

publicbase1,publicbase2

       {

        public:

         derived(){cout<<”3”;}

        };

        voidmain()

        {

           derivedobj;

            cout<

        }

3.

#include

     intfun(inta[],intn)

     {

             intresult=1:

             for(inti=1;i

                result=result*a[i];

             returnresult;

      }

      voidmain()

      {

             inta[3]={3,4,5};

cout<

}

4.

#include

 voidmain()

 {

         inti=1;

         while(i<=8)

         if(++i%3!

=2)continue;

         elsecout<

      }

5.

#include

classM{

intm1,m2;

public:

M(intx,inty)

{m1=x;m2=y;}

voidprint(){cut<

voidprint()const;

};

voidM:

:

print()const

{

cut<

}

voidmain()

{

Ma(5,4);

a.print();

constMb(8,7);

b.print();

}

 

五、程序设计

写一个程序,定义抽象基类Shape,由它派生出3个派生类,Circle(圆形),Square(正方形),Triangle(三角形)。

用虚函数分别计算几种图形面积,并求它们的和。

要求用基类指针数组,使它的每一个元素指向一个派生类对象,其中圆半径radius为15.2,正方形边长length为6.5,三角形底边长bottom为5.4,高height为6.8。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1