C面向对象的程序设计考前必背的名词解释和简答题.docx
《C面向对象的程序设计考前必背的名词解释和简答题.docx》由会员分享,可在线阅读,更多相关《C面向对象的程序设计考前必背的名词解释和简答题.docx(67页珍藏版)》请在冰豆网上搜索。
![C面向对象的程序设计考前必背的名词解释和简答题.docx](https://file1.bdocx.com/fileroot1/2023-2/2/df32395f-b01a-4875-aac9-06ccbce3bbc7/df32395f-b01a-4875-aac9-06ccbce3bbc71.gif)
C面向对象的程序设计考前必背的名词解释和简答题
C++(面向对象的程序设计)考前必背的名词解释和简答题
1.封装封装是将数据和代码捆绑到一起,避免了外界的干扰和不确定性。
例如C++中的类,它定义了该集合中每个对象所共有的属性和方法。
2.继承继承是让某个类型的对象获得另一个类型的对象的特征。
例如:
C++中子类对父类的继承,子类具有父类的特性,同时还可以拥有自己的新特性。
3.多态多态是指不同类型的对象接收相同的消息时产生不同的行为。
多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减小代码的复杂度。
例如函数的重载。
4.什么是this指针?
为什么要用this指针?
this指针是类中的一个特殊指针,当类实例化时,this指针指向对象自己;而在类的声明时,指向类本身。
通过它不仅可以提升成员函数操作的效率,而且能简化运算符重载代码。
5.叙述公有、私有、保护成员在类中、类外和对象中的访问权限。
类中的关键字public,private,protected声明了类中的成员与类外之间的关系,称为访问权限。
对于public成员来说,他们是公有的,可以在类外和对象中访问。
对于private成员来说,他们是私有的,不能在类外和对象中访问,数据成员只能由类中的函数使用,成员函数只允许在类中调用。
对于protected成员来说,他们是受保护的,具有半公开性质,可以在类中与子类中访问。
6.构造函数和析构函数的作用是什么?
构造函数的功能是在创建对象时,给数据成员赋初值,即给对象初始化。
析构函数的功能是释放一个对象,在对象删除前,用来做一些内存释放等清理工作。
7.什么是类的继承和派生?
继承是指一个事物可以继承其父辈全部或部分的特性,同时本身还有自己的特性。
当一个新类从一个已定义的类中派生后,新类不仅继承了原有类的属性和方法,并且还拥有自己新的属性和方法,称为类的继承和派生。
8.派生类public继承方式有那些特点?
(1)在派生类中,基类的公有成员、保护成员和私有成员的访问属性保持不变。
在派生类中,基类的私有成员是无法访问的,虽然基类的私有成员被派生类继承了。
(2)派生类对象只能访问派生类和基类的公有成员。
9.派生类protected继承方式有那些特点?
(1)在派生类中,基类的公有成员、保护成员的访问属性都变成了保护的。
(2)在保护继承方式下,派生类中仍可以访问基类的公有成员和保护成员,但基类的私有成员是无法访问的。
(3)派生类对象只能访问派生类的公有成员,不能访问基类的任何成员。
10.派生类private继承方式有那些特点?
(1)在派生类中,基类的公有成员、保护成员和私有成员的访问属性都将变成私有的。
(2)私有继承方式下,派生类中仍可以访问基类的公有成员和保护成员,但基类的私有成员是无法访问的。
(3)派生类对象只能访问派生类的公有成员,不能访问基类的任何成员。
11.在定义派生类的过程中,如何对基类的数据成员进行初始化?
通过调用基类的构造函数来设定基类的数据成员的初值。
格式为<派生类名>(形参表):
基类1(参数表),基类2(参数表)…对象成员1(参数表),对象成员2(参数表)…{}
12.什么是虚基类?
它的作用是什么?
虚基类是指在派生类中指定的基类是虚继承的方式。
使用虚基类的目的是在多重派生中使用共有基类时,在派生类中只有一个拷贝从而解决有多个基类拷贝所产生的二义性问题。
13.在函数调用过程中,什么是赋值传递,什么是引用传递?
赋值传递是将实参赋值给形参变量,然后执行被调函数体。
赋值传递有两种形式,一是直接传常量或变量值,二是传变量的位置。
引用传递是将形参引用给形参,需要形参与实参指的是同一变量。
14.#include和#include“filename.h”有什么区别?
对于#include,编译器从标准库路径开始搜索filename.h。
对于#include“filename.h”,编译器从用户的工作路径开始搜索filename.h。
15.const有什么用途?
(请至少说明两种)
(1)可以定义const常量
(2)const可以修饰函数的参数、返回值,甚至函数的定义体。
被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
16.类的指针成员为什么要用new另辟内存空间?
为了保证类的封装性,类中的指针成员所指向的内存空间必须在类的定义中自行独立开辟和释放。
语法扩充
1.1选择题
在C++中用(D)能够实现将参数值带回。
a)数组b)指针c)引用d)上述ABC都可
考虑函数原型voidtest(inta,intb=7,char*ch="*"),下面的函数调用中,属于不合法调用的是:
(C)
A)test(5)B)test(5,8)C)test(6,"#")D)test(0,0,"*");
已知:
intm=10;下列表示引用的方法中,正确的是:
(C)
A)int&Z;B)int&t=10;C)int&X=m;D)float&f=&m;
下列不是函数重载所要求的条件是:
(D)
A)函数名相同B)参数个数不同
C)参数类型不同D)函数返回值类型不同
在C++中执行以下4条语句后输出rad值为:
(C)
staticinthot=200;
int&rad=hot;
hot=hot+100;
cout<A)0B)100C)300D)200
系统在调用重载函数时,不能作为确定哪个重载函数被调用的依据是:
(D)
A)参数个数B)参数类型C)函数名称D)函数的返回值类型
对C++语言和C语言的兼容性,描述正确的是:
(A)
A)C++兼容CB)C++部分兼容CC)C++不兼容CD)C兼容C++
在C++中使用流进行输入输出,其中用于屏幕输出的对象是:
(C)
A)cerrB)cinC)coutD)cfile
对使用关键字new所开辟的动态存储空间,释放时必须使用(C)
A)freeB)createC)deleteD)realse
在函数调用时,如某一默认参数要指明一个特定值,则有(A)
A)其之前所有参数都必须赋值B)其之后所有参数都必须赋值
C)其前、后所有参数都必须赋值D)其前、后所有参数都不必赋值
下列哪个类型函数不适合声明为内联函数(A)
A)函数体语句较多B)函数体语句较少
C)函数执行时间较短D)函数执行时间过长
intFunc(int,int);不可与下列哪个函数构成重载(B)
A)intFunc(int,int,int);B)doubleFunc(int,int);
C)doubleFunc(double,double);D)doubleFunc(int,double);
下面的哪个保留字不能作为函数的返回类型(C)
A)voidB)intC)newD)long
一个函数功能不太复杂,但要求被频繁调用,选用(A)。
A.内联函数B.重载函数C.递归函数D.嵌套函数
已知函数f的原型为:
voidf(int&a,char*b);变量s,t的定义是:
ints;chart[]="ABCD";
把s和t分别作为第一参数和第二参数来调用函数f,正确的调用语句是(C)
Af(&s,&t);Bf(&s,t);Cf(s,t);Df(s,&t);
若定义cin>>str;
当输入
MicrosoftVisualStudio6.0!
所得结果是str=(B)。
A、MicrosoftVisualStudio6.0!
B、Microsoft
C、MicrosoftVisual
D、MicrosoftVisualStudio6.0
.函数模板(C)。
A、代表某一具体函数
B、与模板函数是同一个函数
C、与某一个具体的数据类型连用
D、是模板函数实例化的结果
在C++中,关于下列设置参数默认值的描述中,正确的是(C)
A、不允许设置参数的默认值
B、设置参数默认值只能在定义函数时设置
C、设置参数默认值时,应该是先设置右边的再设置左边的
D、设置参数默认值时,应该全部参数都设置
下列表示引用的方法中,(A)是正确的。
已知:
k=1000;
A、int&x=k;B、char&y;
C、int&z=1000;D、float&t=&k;
有如下模板定义:
templateTfun(Tx,Ty){returnx*x+y*y;}
在下列对fun的调用中,错误的是:
(C)
A)fun(2,8)B)fun(2.0,8.2)C)fun(2.3,8)D)fun(‘2’,’8’)
通常情况下,函数模板中的类型参数个数不能是(A)
A)0个B)1个C)2个D)3个
1.2填空题
1、假定有如下定义:
intx;,若要将整型变量y定义为变量x的引用,则应使用的定义语句是_int&y=x;________。
具有相同函数名但具有不同参数表的函数称为重载函数。
'
2、在进行函数调用时,将把参数的值传递给值参数,把参数的_位置_传递给引用参数。
3、执行完下列三条语句后,指针变量c指向__b___。
Inta,b,*c=&a;
int*&p=c;
p=&b;
4、假设有如下函数定义:
voidFun(intx,inty=100);则语旬Fun(5)语句__Fun(5,100)_等价。
5、在一个C++程序中,每个变量都必须遵循__先定义后使用__的原则。
6、下面是一个求数组元素之和的程序。
主程序中定义并初始化了一个数组,然后计算该数组各元素之和,并输出结果。
函数TotalSum计算数组元素之和。
请完成下列程序。
#include
__int Totalsum(int array[],int len)__;
voidmain()
{
inta[5]={2,3,6,8,10};
__intTotal___;
Total=Totalsum(a,5);
cout<<"Sumofarray:
"<}
intTotalsum(intarray[],intlen)
{
____intsum=0____;
for(intI=0;____I____sum+=array[I]_____;
returnsum;
}
7、下面的函数Fun未使用中间变量实现了对两个数的交换,请完成下列函数的定义。
VoidFun(int&x,int&y)
{
x+=y;
y=___x-y____;
__x=x-y_____;
}
8、定义一个函数时,若只允许函数体访问形参的值而不允许修改它的值,则应把该形参声明为__常量__,即在该形参声明的前面加上__const__关键字进行修饰。
9、在一个函数的定义或声明前加上关键字__inline__时,该函数就声明为内联函数。
1.3简答题
A、.内联函数的含义
在函数前加上关键字inline说明了一个内联函数,这使一个函数在程序行里进行代码扩展而不被调用。
这样的好处是减少了函数调用的开销,产生较快的执行速度。
但是由于重复编码会产生较长代码,所以内联函数通常都非常小。
如果一个函数在类说明中定义,则将自动转换成内联函数而无需用inline说明。
B、.函数重载的含义
在同一作用域范围内,相同的函数名通过不同的参数类型或参数个数可以定义几个函数,编译时编译器能够识别实参的个数和类型来决定该调用哪个具体函数。
需要注意的是,如果两个函数仅仅返回类型不同,则编译时将会出错,因为返回类型不足以提供足够的信息以使编译程序判断该使用哪个函数。
所以函数重载时必须是参数类型或者数量不同。
C、引用与指针的区别
D、内联函数使用上的限制
E、定义带默认参数值函数的规则
F、指针与常量的关系
1.4程序阅读题
1)写出下列程序的运行结果。
#include
voidmain()
{
intx;
int&p=x;
x=10;
p=x+10;
cout<}
结果:
20,20
2)写出下列程序的运行结果。
#include
intf(inta)
{
return++a;
}
intg(int&a)
{
return++a;
}
voidmain()
{
intm=0,n=0;
m+=f(g(m));
n+=f(f(n));
cout<<"m="<cout<<"n="<}
结果:
m=3
n=2
3)写出下列程序的运行结果。
#include
voidFun()
{
intnum=20;
cout<<"TheFun'snumis"<}
voidmain()
{
intnum=10;
cout<<"Themain'snumis"<Fun();
{
intnum=30;
cout<<"TheField'snumis"<}
cout<<"Themain'snumis"<}
结果:
Themain'snumis10
TheFun'snumis20
TheField'snumis30
Themain'snumis10
类和对象
2.1选择题
下列的各类函数中,不是类的成员函数。
(C)
A)构造函数B)析构函数C)友元函数D)拷贝初始化构造函数
作用域运算符“:
:
”的功能是:
(B)
A)标识作用域的级别的B)指出作用域的范围的
C)给定作用域的大小的D)标识成员是属于哪个类的
已知:
print()函数是一个类的常成员函数,它无返回值,下列表示中,是正确的。
(A)
A)voidprint()const;B)constvoidprint();
C)voidconstprint():
D)voidprint(const);
在类定义的外部,可以被访问的成员有(C)
A)所有类成员B)private的类成员
C)public的类成员D)public或private的类成员
关于类和对象不正确的说法是:
(C)
A)类是一种类型,它封装了数据和操作B)对象是类的实例
C)一个类的对象只有一个D)一个对象必属于某个类
在C++中实现封装是借助于(B)
A)枚举B)类C)数组D)函数
定义析构函数时,应该注意:
(C)
A)其名与类名完全相同B)返回类型是void类型
C)无形参,也不可重载D)函数体中必须有delete语句
类claseCC1的说明如下,错误的语句是:
(A)
claseCC1{
inta=2;//(A)
CC1();//(B)
public:
CC1(intval);//(C)
~CC1();//(D)
};
类的指针成员的初始化是通过函数完成的,这个函数通常是:
(B)
A)析构函数B)构造函数C)其它成员函数D)友元函数
关于构造函数的说法,不正确的是:
(A)
A)没有定义构造函数时,系统将不会调用它B)其名与类名完全相同
C)它在对象被创建时由系统自动调用D)没有返回值
通常拷贝构造函数的参数是:
(C)
A)对象名B)对象的成员名C)对象的引用名D)对象的指针名
关于成员函数特征的描述中,错误的是:
(A)
A)成员函数一定是内联函数B)成员函数可以重载
C)成员函数可以设置参数的默认值D)成员函数可以是静态的
下列关于构造函数的描述中,错误的是:
(D)
A)构造函数可以设置默认参数;B)构造函数在定义类对象时自动执行
C)构造函数可以是内联函数;D)构造函数不可以重载
有如下类声明“classA{intx;……};”,则A类的成员x是:
(B)
A)公有数据成员B)私有数据成员C)公有成员函数D)私有成员函数
类TM和类TN是两个独立的类,那么类TM中哪种形式的数据成员一定是不允许的:
(C)
A)TM*aB)TN&aC)TMaD)TNa;
以下关于this指针的叙述中正确的是:
(D)
A)任何与类相关的函数都有this指针;B)类的成员函数都有this指针;
C)类的友员函数都有this指针;D)类的非静态成员函数才有this指针;
.关于类模板的说法正确的是:
(B)
A)类模板的主要作用是生成抽象类
B)类模板实例化时,编译器将根据给出的模板实参生成一个类
C)在类模板中的数据成员具有同样类型
D)类模板中的成员函数没有返回值
.以下关键字不能用来声明类的访问权限的是:
(C)
A)publicB)privateC)staticD)protected
.类的私有成员可在何处访问(D)
A)通过子类的对象访问B)本类及子类的成员函数中
C)通过该类对象访问D)本类的成员函数中
.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是:
(A)
A)编译器总是自动创建一个不带参数的构造函数B)这个类没有构造函数
C)这个类不需要构造函数D)该类不能通过编译
.一个类可包含析构函数的个数是:
(B)
A)0个B)1个C)0个或1个D)0个或多个
.一个类可包含构造函数的个数是:
(D)
A)0个B)0个或1个C)0个或多个D)1个或多个
.this指针存在的目的是:
(B)
A)保证基类公有成员在子类中可以被访问
B)保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码
C)保证基类保护成员在子类中可以被访问
D)保证基类私有成员在子类中可以被访问
.下列关于类的权限的描述错误的是:
(A)
A)类本身的成员函数只能访问自身的私有成员
B)类的对象只能访问该类的公有成员
C)普通函数不能直接访问类的公有成员,必须通过对象访问
D)一个类可以将另一个类的对象作为成员
.设类A将其它类对象作为成员,则建立A类对象时,下列描述正确的是:
(B)
A)A类构造函数先执行B)成员构造函数先执行
C)两者并行执行D)不能确定
.假定有类AB,有相应的构造函数定义,能正确执行“ABa(4),b(5),c[3],*p[2]={&a,&b};”语句,请问执行完此语句后共调用该类构造函数的次数为(C)
A)3B)4C)5D)6
拷贝构造函数的作用是(C)。
A.进行数据类型的转换B.用对象调用成员函数
C.用对象初始化对象D.用一般类型的数据初始化对象
下列静态数据成员的特性中,错误的是(D)。
A.静态数据成员的声明以关键字static开头
B.静态数据成员必须在文件作用域内初始化
C.引导数据成员时,要在静态数据成员前加(类名)和作用域运算符
D.静态数据成员不是类所有对象共享的
通过指针访问类对象成员的方法是(D)。
A.:
:
B.; C.. D.->
静态成员函数没有(B)。
A.返回值 B.this指针 C.指针参数 D.返回类型
在下列关键字中,用于说明类中公有成员的是(A)。
A.public;B.private;C.protected;D.friend
不是构造函数的特征(D)。
A.构造函数的函数名与类名相同; B. 构造函数可以重载;
C.构造函数可以设置缺省参数; D. 构造函数必须指定类型说明。
是析构函数的特征(A)。
A.一个类中只能定义一个析构函数; B. 析构函数名与类名不同;
C. 析构函数的定义只能在类体内; D. 析构函数可以有一个或多个参数。
关于成员函数特征的下述描述中,(A)是错误的。
A.成员函数一定是内联函数; B. 成员函数可以重载;
C.成员函数可以设置参数的缺省值; D. 成员函数可以是静态的。
下述静态数据成员的特性中,(D)是错误的。
A.说明静态数据成员时前边要加修饰符static;
B.静态数据成员要在类体外进行初始化;
C.引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符;
D.静态数据成员不是所有对象所共用的。
2.2填空题
1、在撤销类的对象时,C++程序将自动调用该对象的__析构___函数。
2、类中的构造函数是一个特殊的成员函数,它由类的对象__自动_调用,它的作用是___为对象分配内存,数据成员初始化___。
3、对类中的成员函数和属性的访问是通过__public__、__protected__和___private__这3个关键字来控制的。
4、__delete__运算符删除new运算符所动态分配的内存空间。
5、假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构函数形式为__MyClass()__。
6、类中构造函数有__一个或多__个,析构函数有___一___个。
7、类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的___数据成员___,共同行为被描述为类中的__成员函数__。
8、若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入语句_friendclassFriendClass;___。
9、在结构定义中,数据和成员函数默认权限是__public__。
在类定义中,数据和成员函数默认权限是__private___。
10、在下面程序的横线处填上适当的语句,使类型该程序执行结果为10。
#include
classMyClass
{
pub1ic:
___MyClass(inta){_x=a;}____//为x置值
__intGetNum(){returnx;}______//取x值
private:
intx;
};
voidmain()
{
Myclassmy(10);
Cout<