文档介绍:20XX 年 C-C++ 笔试面试题目
语言是世界上最流行、使用最广泛的高级程序设计语言之一。下面小编为大家介绍一下 C/C++ 笔试、面试题目的文章,欢迎阅读。
什么是 “引用 是一种关联
关系 ;
聚合表示 has-a 的关系,是一种相对松散的关系,聚合类不需要对被
聚合类负责,如下图所示,用空的菱形表示聚合关系:
从实现的角度讲,聚合可以表示为 :
class A {...} class B { A* a; .....}
组合表示 contains-a 的关系,关联性强于聚合:组合类与被组合类有
相同的生命周期,组合类要对被组合类负责,采用实心的菱形表示组合关
系:
实现的形式是 :
class A{...} class B{ A a; ...}
,并简单叙述之 ?
封装:将客观事物抽象成类,每个类对自身的数据和方法实行
protection(private, protected,public)
2. 继承:广义的继承有三种实现形式:实现继承 (指使用基类的属性
和方法而无需额外编码的能力 )、可视继承 (子窗体使用父窗体的外观和实
现代码 )、接口继承 (仅使用属性和方法,实现滞后到子类实现 )。前两种(类继承 )和后一种 (对象组合 = 接口继承以及纯虚函数 )构成了功能复用的两
种方式。
多态:系统能够在运行时,能够根据其类型确定调用哪个重载的
成员函数的能力,称为多态性。 (见: C++ 中类的多态与虚函数的使用 )
重载 (overload) 和重写 (overried ,有的书也叫做 “覆盖 ”)的区别 ?
常考的题目。
从定义上来说:
重载:是指允许存在多个同名函数,而这些函数的参数表不同 (或许
参数个数不同,或许参数类型不同,或许两者都不同 )。
重写:是指子类重新定义父类虚函数的方法。
从实现原理上来说:
重载:编译器根据函数不同的参数表,对同名函数的名称做修饰,然
后这些同名函数就成了不同的函数 (至少对于编译器来说是这样的 )。如,
有两个同名函数: function func(p:integer):integer; 和 function
func(p:string):integer; 。那么编译器做过修饰后的函数名称可能是这样的:
int_func 、 str_func。对于这两个函数的调用,在编译器间就已经确定了,
是静态的。也就是说,它们的地址在编译期就绑定了 (早绑定 ),因此,重载和多态无关 !
重写:和多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的 (调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的 (晚绑定 )。
多态的作用 ?