面向对象程序设计复习题纺院.docx

上传人:b****4 文档编号:11973114 上传时间:2023-04-16 格式:DOCX 页数:20 大小:20.49KB
下载 相关 举报
面向对象程序设计复习题纺院.docx_第1页
第1页 / 共20页
面向对象程序设计复习题纺院.docx_第2页
第2页 / 共20页
面向对象程序设计复习题纺院.docx_第3页
第3页 / 共20页
面向对象程序设计复习题纺院.docx_第4页
第4页 / 共20页
面向对象程序设计复习题纺院.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

面向对象程序设计复习题纺院.docx

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

面向对象程序设计复习题纺院.docx

面向对象程序设计复习题纺院

面向对象程序设计(复习题)

一、填空题

1.类是一种用户定义的类型,它由两大成员组成,其中用数据成员来描述同类事物的属性,用函数成员来描述它们的行为。

2.C++语言面向对象程序设计有三大基本特性,其中二个是

继承、多态性(或数据封装)。

3.基类的私有成员不能被继承、保护成员能被继承、公有成员能被继承。

4.利用一个现有的类来生成一个新类的机制称为继承。

5.在C++中,函数的用法涉及到两个方面:

定义函数是建立函数,调用函数是使用函数。

6、__析构函数___是特殊的成员函数,在对象作用域结束时自动调用。

7、友元关系是非传递的和_非对称的____,除非特别声明,否则,通常情况下若F是A的友元,A__不是___F的友元。

8、运算符函数既可以重载为_成员__函数,也可以重载为友元函数。

9、在具有继承关系的类层次结构中,构造函数的执行顺序是:

_基类__、_类对象成员__、派生类。

10、具有纯虚函数的类称为__抽象类___。

11、类的数据隐藏是通过定义成员为private或protected来实现。

二、是非题(回答“Y”或“N”)

1、.构造函数的名字与类的名字相同。

(Y)

2、插入运算符<<不能重载。

(N)

3、.要实现动态联编,必须使用基类指针调用虚函数。

(Y)

4、cin是ostream类的对象。

(N)

5、类模板就是模板类。

(N)

6、类模板就是模板类。

(N)

7、友员函数通过this指针访问对象成员。

(N)

8、构造函数的名字与类的名字相同。

(Y)

9、类的protected成员是不能被继承的。

(N)

10、运算符重载后其原有的基本语义不变。

(Y)

11.构造函数的名字不必与类的名字相同。

(N)

12.一个类的友员函数可以使用该类的私有成员。

(Y)

13.符号<<不能重载。

(N)

14.析构函数没有返回类型。

(Y)

15.类TEST的函数成员TEST(constTEST&obj)称为拷贝构造函数。

(Y)

16.类B继承了类A,二个类都有public成员voidshow(),则派生类的voidshow()覆盖了基类的voidshow()。

(Y)

17.函数重载是动态绑定。

(N)

18.类模板不能直接生成对象。

(Y)

19.类属函数的实例化是隐式。

(Y)

三.选择题

1.下列虚基类的声明中,正确的是(D)。

A).classvirtualD:

publicBB).virtualclassD:

publicB

C)classD:

publicBvirtualD)classD:

virtualpublicB

2.下列关于运算符重载的描述中,(D)是正确的。

A)可以改变参与运算的操作数个数B)可以改变运算符原来的优先级

C)可以改变运算符原来的结合性D)不能改变原运算符的语义

3.假设baseClass为抽象类,则下列(B)声明是正确的。

A)baseClassfun(int);B)baseClass*bp;

C)intfun(baseClass);D)baseClassobj;

4.下面对模板的声明中,正确的是(C)。

A)templateB)template

C)templateD)template

5.要求打开文件D:

\file.dat,可写入数据,正确的语句是:

(D)

A)ifstreaminfile(“D:

\file.dat”,ios:

:

in)B)ifstreaminfile(“D:

\\file.dat”,ios:

:

in)

C)ofstreaminfile(“D:

\file.dat”,ios:

:

out)D)fstreaminfile(“D:

\\file.dat”,ios:

:

in|ios:

:

out)

6.填空选择

#include

classBase

{

public:

voidprint(){cout<<”Base:

:

print”<

};

classDerived:

publicBase

{

voidprint()

{

___(B)________;//显式调用基类的函数print()

cout<<”Derived:

:

print”<

}

};

A.)print()B)Base:

:

print()C).Base.print()D)Base->print()

7.下面的描述中,正确的是(C)。

A)虚函数是一个静态成员函数;

B)虚函数是一个非成员函数;

C)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型;

D)虚函数可以在函数说明时定义,也可以在函数实现时定义。

8.下面函数原型声明中,(B)声明了fun为纯虚函数。

A)voidfun()=0;B)virtualvoidfun()=0;

C)virtualvoidfun();D)virtualvoidfun(){};

9.建立类模板对象的实例化过程为(C)。

A)基类->派生类B)构造函数->对象

C)模板类->对象D)模板类->模板函数

10.在下列选项中,(A)不是ostream类的对象。

A)cinB)cerrC)clogD)cout

11.假设SampleClass为抽象类,则下列(B)声明是正确的。

A)SampleClassfun(int);B)SampleClass*bp;

C)intfun(SampleClass);D)SampleClassobj;

12.下面对模板的声明中,正确的是(B)。

A)templateB)template

C)templateD)template

13.要求打开文件D:

\file.dat,可写入数据,正确的语句是:

(D)

A)ifstreaminfile(“D:

\file.dat”,ios:

:

in)B)ifstreaminfile(“D:

\\file.dat”,ios:

:

in)

C)ofstreaminfile(“D:

\file.dat”,ios:

:

out)D)fstreaminfile(“D:

\\file.dat”,ios:

:

in|ios:

:

out)

14.下面对友元的错误描述是(D).

A)关键字friend用于声明友元

B)一个类中的成员函数可以是另一个类的友元。

C)友元函数访问对象的成员不受访问特性的影响

D)友元函数通过this指针访问对象成员

15.下列虚基类的声明中,正确的是(A)。

A).classB:

virtualpublicAB).virtualclassB:

publicA

C)classB:

publicAvirtualD)classvirtualB:

publicA

16、不论派生类以何种方式继承基类,都不能使用基类的( B )

A)public成员     B)private成员

C)protected成员   D)public和protected成员

17.下面函数原型声明中,(B)声明了show()为纯虚函数。

A)voidshow()=0;B)virtualvoidshow()=0;

C)virtualvoidshow();D)virtualvoidshow(){};

18.在下列选项中,(A)不是ostream类的对象。

A)cinB)cerrC)clogD)cout

四、阅读程序,写出下列程序的运行结果

1.#include

template

classbase

{public:

base(Ti,Tj){x=i;y=j;}

Tsum(){returnx+y;}

private:

Tx,y;

};

voidmain()

{baseobj2(3.3,5.5);

cout<

baseobj1(3,5);

cout<

}

运行结果:

8.8

8

2.

#include

classcounter

{public:

voidsetnum(inti){num=i;}

voidshownum(){cout<

staticintnum;

};

intcounter:

:

num=1;

voidmain()

{inti;

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

{counter:

:

num+=i;

cout<

:

num<<'\t';

}

cout<

}

124711

3.#include

usingnamespacestd;

classA

{public:

intf1();

intf2();

voidsetx(intm){x=m;cout<

voidsety(intn){y=n;cout<

intgetx(){returnx;}

intgety(){returny;}

private:

intx,y;

};

intA:

:

f1(){returnx+y;}

intA:

:

f2(){returnx-y;}

intmain()

{Aa;

a.setx(10);a.sety(5);

cout<

cout<

}

解答:

10

5

105

155

4.#include

Template

voidfun(T&x,T&y)

{Ttemp;

temp=x;x=y;y=temp;}

voidmain()

{inti,j;

i=10;j=20;

fun(i,j);

cout<<”i=”<

doublea,b;

a=1.1;b=2.2;

fun(a,b);

cout<<”a=”<

}

运行结果:

i=20j=10

A=2.2b=1.1

5.#include

classpoint

{intx,y;

public:

point(intvx,intvy){x=vx;y=vy;}

point(){x=0;y=0;}

pointoperator+(pointpl);

pointoperator-(pointpl);

voidprint(){cout<

};

pointpoint:

:

operator+(pointpl)

{

pointp;

p.x=x+pl.x;

p.y=y+pl.y;

returnp;

}

pointpoint:

:

operator-(pointpl)

{

pointp;

p.x=x-pl.x;

p.y=y-pl.y;

returnp;

}

voidmain()

{

pointpl(50,40),p2(30,10);

p1.print();p2.print()

pl=pl-p2;pl.print();p2.print();

}

程序的运行结果为:

5040

3010

2030

3010

7、

#include

classA

{public:

A(){a=5;}

voidprinta(){cout<<"A:

a="<

private:

inta;

friendclassB;

};

classB

{public:

voiddisplay1(At){t.a++;cout<<"display1:

a="<

voiddisplay2(At){t.a--;cout<<"display2:

a="<

};

voidmain()

{Aobj1;Bobj2;

obj1.printa();

obj2.display1(obj1);

obj2.display2(obj1);

obj1.printa();

}

程序的运行结果为:

A:

a=5

display1:

a=6

display1:

a=4

A:

a=5

9、#include

classBase

{public:

voidabc(){cout<<"Baseclass"<

};

classDerived1:

publicBase

{public:

voidabc(){cout<<"Derived1class"<

};

classDerived2:

publicBase

{public:

voidabc(){cout<<"Derived2class"<

};

voidmain()

{Baseobj1,*p;Derived1obj2;Derived2obj3;

p=&obj1;p->abc();

p=&obj2;p->abc();

p=&obj3;p->abc();

obj1.abc();obj2.abc();obj3.abc();

}

运行结果:

Baseclass

Baseclass

Baseclass

Baseclass

Derived1class

Derived2class

10、#include

voidmain()

{doublex=123.456;

cout.width(10);cout.setf(ios:

:

dec,ios:

:

basefield);cout<

cout.setf(ios:

:

left);cout<

cout.width(15);cout.setf(ios:

:

right,ios:

:

left);cout<

cout.setf(ios:

:

showpos);cout<

cout<<-x<

}

运行结果:

123.456

123.456

123.456

+123.456

-123.456

11、#include

classvector

{public:

vector(){}

vector(intI,intj){x=I;y=j;}

friendvectoroperator+(vectorv1,vectorv2)

{vectortempvector;

tempvector.x=v1.x+v2.x;

tempvector.y=v1.y+v2.y;

returntempvector;

}

voiddisplay()

{cout<<”(“<

private:

intx,y;

};

voidmain()

{vectorv1(1,2),v2(3,4),v3;

cout<<”v1=”;v1.display();

cout<<”v2=”;v2.display();

v3=v1+v2;cout<<”v3=v1+v2=”;

v3.display();

}

执行结果为:

v1=(1,2)

v2=(3,4)

v3=v1+v2=(4,6)

五.编程题

1.使用成员函数(或友员)函数编程序重载运算符“+”,使该运算符能实现两个字符串的连接。

方法一:

用友员函数编程:

#include

#include

#include

classX

{charl[100];

public:

voidsetchar(){cout<<"请输入字符串:

"<

friendXoperator+(X&c1,X&c2);

};

Xoperator+(X&c1,X&c2)

{strcat(c1.l,c2.l);

cout<<"两个字符串相加后为:

"<

returnc1;};

voidmain()

{Xa;Xb;

a.setchar();

b.setchar();

a+b;

}

方法二:

用成员函数编程:

#include

#include

#include

classtt

{charr[700];

public:

voidoperator+(ttf);

voidsetchar(){cout<<"输入字符:

"<

gets(r);}

};

voidtt:

:

operator+(ttf)

{strcat(r,f.r);

cout<<"两个字符串相加得:

"<

}

voidmain()

{ttd;tts;

s.setchar();

d.setchar();

d+s;

}

2、编写一程序,定义一个圆类CIRCLE,它能提供计算面积和边长和平移圆心。

#include"iostream.h"

#definePI3.1415926

classCIRCLE

{

public:

CIRCLE()

{m_x=0;

m_y=0;

m_r=0;

}

CIRCLE(doublex,doubley,doubler)

{m_x=x;

m_y=y;

m_r=r;

}

voidSetValue(doublex,doubley,doubler)

{m_x=x;

m_y=y;

m_r=r;

}

doubleGet_x(){returnm_x;}

doubleGet_y(){returnm_y;}

doubleGet_radius(){returnm_r;}

voidmove(doublex,doubley)

{m_x+=x;

m_y+=y;

}

doublearea()

{returnm_r*m_r*PI;}

doubleside()

{return2*m_r*PI;}

private:

doublem_x,m_y,m_r;

};

voidmain()

{CIRCLEa(16,20,30);

a.move(-3,-10);

cout<<"圆形a的圆心:

("<

cout<<"圆形a的半径:

"<

cout<<"圆形a的面积:

"<

cout<<"圆形a的边长:

"<

}

3.定义一个Box(盒子)类,在该类定义中包括

数据成员:

length(长)、width(宽)和height(高);

成员函数:

构造函数Box,设置盒子长、宽和高三个初始数据;用函数volume计算并输出盒子的体积。

在main函数中,要求创建Box对象,并求盒子的体积。

解答:

#include

usingnamespacestd;

classBOX

{public:

BOX(doublel,doublew,doubleh)

{length=l;

width=w;

height=h;

}

voidvolume()

{cout<<"volume="<

}

private:

doublelength,width,height;

};

intmain()

{BOXbox1(1,3,5);

box1.volume();

BOXbox2(2,4,6);

box2.volume();

}

4、某学校对教师每月工资的计算规定如下:

固定工资+课时补贴。

教授的固定工资为5000元,每个课时补贴为50元;副教授的固定工资为3000元,每个课时补贴为20元;讲师的固定工资为2000元,每个课时补贴为20元。

定义教师抽象类,派生不同职称的教师类,编写程序求不同职称教师的月工资。

#include

usingnamespacestd;

classteacher

{public:

teacher(chartname[],inttime)

{strcpy(name,tname);

coursetime=time;

}

virtualintpay()=0;

virtualvoidprint()=0;

char*getname()

{returnname;}

intgetc

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

当前位置:首页 > 经管营销 > 经济市场

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

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