面对象设计复习题.docx

上传人:b****6 文档编号:4560862 上传时间:2022-12-06 格式:DOCX 页数:14 大小:18.76KB
下载 相关 举报
面对象设计复习题.docx_第1页
第1页 / 共14页
面对象设计复习题.docx_第2页
第2页 / 共14页
面对象设计复习题.docx_第3页
第3页 / 共14页
面对象设计复习题.docx_第4页
第4页 / 共14页
面对象设计复习题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

面对象设计复习题.docx

《面对象设计复习题.docx》由会员分享,可在线阅读,更多相关《面对象设计复习题.docx(14页珍藏版)》请在冰豆网上搜索。

面对象设计复习题.docx

面对象设计复习题

面对象设计复习题

一、选择题:

1.下列哪项不是面向对象程序设计的主要特征d

a.封装b.继承c.多态d.结构

2.若给出声明:

constcharcc=‘a’;

char*pc;

constchar*pcc;

charc=‘b’;

char*constcpc=&c;

下面的赋值表达式哪个是合法的

a.pc=&cc;b.pcc=&cc;c.cpc=pc;d.cc=’f’;

3.C++程序的执行总是从哪里开始的

a.main函数b.头文件c.第一行d.函数注释

4.下面对类和对象的描述不正确的是:

a.对象是类的一个实例b.任何一个对象都归属于一个具体的类

c.一个类只能有一个对象d.类与对象的关系和数据类型与变量的关系相似

5.以下哪个不是循环语句

a.while语句b.do-while语句c.for语句d.if-else语句

6.按照标识符的要求,下列符号哪个不能组成标识符

a.下划线b.连接符c.大小写字母d.数字字符

7.已知:

intm=10;在下列表示引用的方法中,哪个是正确的

a.int&x=m;b.int&y=10;c.int&z;d.float&t=&m;

8.以下有关类与结构体的叙述不正确的是:

a.结构体中只包括数据;类中封装了数据和操作

b.结构体的成员对外界通常是开放的;类的成员可以被隐蔽

c.用struct可以声明一个类型名;而class可以声明一个类名

d.结构体成员默认为private;类成员默认为public

9.下列哪个不是构造函数的特征

a.构造函数的函数名与类名相同b.构造函数可以重载

c.构造函数可以设置缺省参数d.构造函数必须指定返回值类型

10.已知:

类A中一个成员函数说明如下:

voidSet(A&a);其中,A&的含义是什么

a.指向类A的指针为ab.将a的地址值赋给变量Set

c.a是类A对象的引用,用来作函数Set()的参数

d.变量A与a按位与作为函数Set()的参数

11.在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用下列哪个函数

a.内联函数b.重载函数c.递归调用d.嵌套调用

12.已知:

print()函数是一个类的常成员函数,它无返回值,下列表示中,哪个是正确的

a.voidprint()const;b.constvoidprint();

c.voidconstprint();d.voidprint(const);

13.以下能对对象进行初始化的是:

a.构造函数b.析构函数c.友元函数d.静态成员函数

14.关于虚函数的描述中,哪个是正确的

a.虚函数是一个static类型的成员函数b.虚函数是一个非成员函数

c.基类中说明了虚函数后,派生类中其对应的函数可不必说明为虚函数

d.派生类的虚函数与基类的虚函数具有不同的参数个数和类型

15.设有以下类的定义:

classTemp{

intx;

public:

voidsetx(intt=0);

};

若在类外定义成员函数setx(),以下定义形式中正确的是哪个

setx(intt){…}Temp:

:

setx(intt){…}

void:

:

setx(intt){…}Temp:

:

setx(intt=0){…}

16.以下关于函数重载的要求,哪个叙述不正确

a.函数名相同b.函数参数个数不同c.函数返回值类型不同

d.函数参数个数相同但参数类型至少有一个不同

17.已知:

classA{

private:

inta,b;

floatc;

public:

voidfunc1(int,int);

friendintgetData();

};

则类A分别有几个数据成员和成员函数

a.2,2b.3,2c.2,1d.3,1

18.已知:

inta,*pa;

char*p=”Ilikecomputer!

”;

关于运算符new和delete的使用,下列表达式哪个是正确的

a.a=newint;b.deletep[12];c.pa=newint(10);d.p=newint[12];

19.对于类A而言,已知函数A:

:

A(constA&a);则该函数是类A的什么函数

a.内联函数b.友元函数c.拷贝构造函数d.类型转换函数

20.下面类的定义中哪个地方是不正确的

classexample{

floatx;

public:

example();(a)

example(int,float);(b)

operatorint();(c)

~example();

constinty=23;(d)

};

二、填空题:

1.在C++中,函数的参数有两种传递方式,它们是值传递和(引用传递)。

2.当一个成员函数被调用时,该成员函数的(this指针)指向调用它的对象。

3.在C++类中,const关键字可以修饰对象和成员函数,const对象不能(调用非const的普通成员

函数),const成员函数不能(修改)。

4.在C++类中,有一种不能定义对象的类,这样的类只能被继承,称之为(抽象类),定义该

类至少具有一个(纯虚函数)。

5.描述命题"A小于B或小于C"的表达式为(a

6.在基类和派生类中,派生类可以定义其基类中不具备的数据和操作。

对两个有相同名字的数据成员进行访问时,如果没有(类名和作用域分辨符),对此数据成员的访问将出现歧义。

7.静态数据成员在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象(共用)。

8.面向对象的程序设计有四大特征,它们是抽象、封装、(继承)、(重载)。

9.在C++中,构造派生类对象时,总是先从(基类)的初始化开始的。

10.类是用户定义的类型,具有类类型的变量称作(对象)。

11.静态的成员函数没有隐含的(this指针),所以,它们只能访问静态的数据成员。

12.构造函数与析构函数除功能不同外,在定义形式上,它们的区别还包括构造函数名与类名相同,

而析构函数名是在类名前加一个~、(无参数)、(不能重载)。

13.在公有派生的情况下,基类数据成员在派生类中的访问权限(不变)。

三、看程序写结果:

1.#include<>

classExample{

inta,b;

public:

Example()

{a=b=0;

cout<<"Thisisanexample!

"<

}

Example(intx,inty){a=x;b=y;}

~Example()

{

if(a>b)cout<<"a>b"<

elsecout<<"a<=b"<

}

voiddisp()

{cout<<"a="<

};

voidmain()

{

Examplee1,e2(6,3);

();

();

}

结果

Thisisaexample!

a=0,b=0

a=6,b=3

a>b

a<=b

2.#include<>

classSample{

intx;

public:

Sample(){};

Sample(inta){x=a;}

Sample(constSample&a){x=+++10;}

voidprint(){cout<<"x="<

};

voidmain(){

Samples1

(2),s2(s1);

();

();

}

结果

X=3

X=12

3.#include<>

classA{

private:

intx1;

public:

A(intp1){x1=p1;cout<<"InA:

";cout<<"x1="<

"<

};

classB{

intx2;

public:

B(intp2)

{x2=p2;cout<<"InB:

";cout<<"x2="<

~B(){cout<<"destructingclassB!

"<

};

classC{

intx3;

public:

C(intp3):

x3(p3)

{cout<<"InC:

";cout<<"x3="<

~C(){cout<<"destructingclassC!

"<

};

voidmain()

{Aa

(1);

Bb

(2);

Cc(4);

}

结果:

InA:

x1=1

InB:

x2=2

InC:

x3=4

destructingclassC!

destructingclassB!

destructingclassA!

4.#include<>

classp_example{

intnum;

public:

voidset_num(intval){num=val;}

voidshow_num(){cout<

voidmain()

{p_exampleob,obj[2];p_example*p;

(1);

obj[0].set_num(10);obj[1].set_num(20);p=&ob;

p->show_num();

p=obj;

p->show_num();

p++;

p->show_num();

p--;

p->show_num();}

结果:

1

10

20

10

5.#include<>

int&f(int&i)

{i+=10;returni;}voidmain()

{intk=0;

int&m=f(k);

cout<

m=20;

cout<

}

结果

10

20

6.#include<>

classA{

inta;

public:

intc;

A(inti){a=i;c=0;}intfun(intb){returna*c+b;}};

voidmain()

{intA:

:

*pc=&A:

:

c;

int(A:

:

*pfun)(int)=&A:

:

fun;Aob

(1);

ob.*pc=3;

cout<<<

cout<<(ob.*pfun)(7)<

A*p=&ob;

p->*pc=4;

cout<c<

cout<<(p->*pfun)(7)<

}

结果

3

10

4

11

7.#include<>

classb

{

public:

b(){cout<<"b:

:

b()constructed"<

virtual~b(){cout<<"b:

:

b()destructed"<

};

classd:

publicb

{

private:

char*buf;

public:

d(inti){cout<<"d:

:

d()constructed"<

virtual~d(){delete[]buf;cout<<"d:

:

d()destructed"<

};

voidfun(b*a)

{

deletea;

}

voidmain()

{

b*a=newd(25);

fun(a);

}

结果

b:

:

b<>constructed

d:

:

d<>constructed

d:

:

d<>destructed

b:

:

b<>destructed

四、编写程序:

1.定义一个复数类,使其至少具有实部(re)和虚部(im)两个数据成员,并具有显示复数、求两个复数相加、两个复数相减的功能。

还要求定义类的构造函数初始化复数。

#include<>

classfushu

{

private:

floatre;

floatim;

public:

fushu(){}

fushu(floatx,floaty){re=x,im=y;}

voiddisp()

{

cout<

}

fushuplus(fushua,fushub)

{

fushu:

:

re=+;

fushu:

:

im=+;

}

fushuminus(fushua,fushub)

{

fushu:

:

re=main()

{

fushua1(10,5),a2(5,3),a3;

(a1,a2);

();

(a1,a2);

();

}

2.编写一个程序计算正方体、球体、圆柱体的表面积和体积。

要求:

创建一个Shape抽象类,正方体、球体、圆柱体是其派生类;编写main()函数显示所求正方体、球体、圆柱体的表面积和体积(使用一个抽象类的指针完成)。

#include<>

classshape

{

protected:

floatx;

public:

shape(floatx){shape:

:

x=x;}

virtualvoiddisp()=0;

};

classcube:

publicshape

{

public:

cube(floatx):

shape(x){}

voiddisp()

{

cout<<"正方体表面积:

"<

cout<<"正方体体积:

"<

}

};

classsphere:

publicshape

{

public:

sphere(floatx):

shape(x){}

voiddisp()

{

cout<<"球形表面积:

"<<4**x*x<

cout<<"球形体体积:

"<<4/3**x*x*x<

}

};

classyuanzhu:

publicshape

{

floatheight;

public:

yuanzhu(floatx,floaty):

shape(x)

{

height=y;

}

voiddisp()

{

cout<<"圆柱体表面积:

"<<2**x*x+2**x*height<

cout<<"圆柱体体积:

"<

}

};

voidmain()

{

shape*s;

cubec(10);

spheres1(10);

yuanzhuy(10,20);

s=&c;

s->disp();

s=&s1;

s->disp();

s=&y;

s->disp();

}

3.定义长方形类Rectangle,其属性是长(length)和宽(width),要求能够计算长方形的面积和周长。

#include<>

classrectangle

{

private:

intlength,width;

public:

rectangle(){}

rectangle(intx,inty){length=x,width=y;}

intperimeter()

{

return2*(width+length);

}

intsquare()

{

returnwidth*length;

}

};

voidmain()

{

rectangler1(30,20);

cout<<"周长:

"<<()<

cout<<"面积:

"<<()<

}

4.定义一个字符栈类Stack(包括类的实现)。

数据成员包括一个存放字符的数组stck[]和一个栈指针top。

栈数组的尺寸由常量SIZE确定。

栈的基本操作为Push()和Pop()。

#include<>

#include<>

#defineSIZE100

classstack

{

private:

charstck[100];inttop;

public:

stack(){stck[0]=NULL;top=-1;}

/*(chara[100],intb)

{

stck=a;

b=strlen(a);

top=b-1;

}*/

intpush(stack&st,charx)

{

if==SIZE-1)return0;

++;

[top]=x;

return1;

}

intpop(stack&st)

{if==-1)return0;charx;x=[top];;return1;}

};

voidmain()

{

stacks;

cout<<(s,'r')<

cout<<(s)<

}

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

当前位置:首页 > 高等教育 > 军事

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

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