前言
上一篇文章我们详细了介绍了多态,用汇编一步一步的查看了多态的实现原理,讲解了这么多理论知识该做一些面试题了,这些面试题都是历年来大厂所出的笔试题,希望大家可以把我今天所讲的全部学懂~
一、理论知识类
1.
下面哪种面向对象的方法可以让你变得富有
( A)
A:
继承
B:
封装
C:
多态
D:
抽象
这道题说哪种面向对象的方法可以让我们更富有,也就是东西更多,那么一定是继承无疑了,因为继承可以让我们获得所有父类的东西。
2. ( D)
是面向对象程序设计语言中的一种机制。这种机制实现了方法的定义与具体的对象无关,
而对方法的调用则可以关联于具体的对象。
A:
继承
B:
模板
C:
对象的自身引用
D:
动态绑定
这道题的关键在于“方法的定义与具体的对象无关”这句话,选项里只有多态才满足这样的要求,当我们是父类指针的时候调用一个函数有可能调用的是父类的实现,有可能调用的是子类的实现,这要看指针里面存放的是什么类型的对象,如果不是多态那么父类指针只能调用父类的方法。
3.
面向对象设计中的继承和组合,下面说法错误的是?(C)
A
:继承允许我们覆盖重写父类的实现细节,父类的实现对于子类是可见的,是一种静态复
用,也称为白盒复用
B
:组合的对象不需要关心各自的实现细节,之间的关系是在运行时候才确定的,是一种动
态复用,也称为黑盒复用
C
:优先使用继承,而不是组合,是面向对象设计的第二原则
D
:继承可以使子类能自动继承父类的接口,但在设计模式中认为这是一种破坏了父类的封
装性的表现
c选项错误的原因是
优先使用对象组合,而不是类继承,
通常可以看他们的关系是is a(每个派生类对象都是一个基类对象)还是has a(组合是has a的关系,假设B组合了A,那么每个B对象中都有一个A对象)。
4.
以下关于纯虚函数的说法
,
正确的是
(A )
A
:声明纯虚函数的类不能实例化对象
B
:声明纯虚函数的类是虚基类
C
:子类必须实现基类的纯虚函数
D
:纯虚函数必须是空函数
纯虚函数不可以实例化出对象,声明纯虚函数的类是抽象类,如果不用子类可以不重写基类的纯虚函数,纯虚函数的函数体内可以实现,不一定必须是空函数,这点大家可以用编译器自行确认。
5.
关于虚函数的描述正确的是
(B )
A
:派生类的虚函数与基类的虚函数具有不同的参数个数和类型
B
:内联函数不能是虚函数
C
:派生类必须重新定义基类的虚函数
D
:虚函数可以是一个
static
型的函数
A:虚函数有三同,函数名相同,返回值相同,参数相同(协变和析构函数除外),协变就是返回值可以是具有父子关系的指针或引用,而析构函数由于编译器统一识别为destruct,所以即使每个类看着析构函数的函数名不同,但是却可以实现虚函数。B:内联函数不能成为虚函数,因为内联函数会被展开没有地址,而虚函数需要地址。C:派生类可以不重新定义基类的虚函数。D:虚函数不可以是static类型,因为虚函数需要this指针调用,而static类型的函数无this指针。