c++ 2013面试题部分知识点
### C++中的重载(Overload)、覆盖(Override)与隐藏(Hide) 在C++中,函数重载、覆盖和隐藏是理解类和继承的关键概念。它们涉及到如何在类和派生类中定义和使用函数,以及这些函数在运行时如何被调用。 #### 重载(Overload) 重载是指在同一个作用域内,可以定义多个函数,只要这些函数的名字相同,但参数列表不同。参数列表的不同可以是参数的数量、类型或顺序的差异。重载的函数可以有`virtual`关键字,也可以没有。当调用重载的函数时,编译器会根据传递的实际参数选择合适的函数版本。这是**静态联编**的一个例子,因为在编译时期就能确定将调用哪个函数。 #### 覆盖(Override) 覆盖发生在派生类中,当派生类中定义了一个与基类中完全相同的函数,包括函数名、参数列表和返回类型,且基类中的函数被声明为`virtual`时。这种情况下,派生类的函数将覆盖基类中的同名函数。覆盖是实现多态的一种方式,允许子类以自己的方式实现基类的方法。在运行时,编译器会根据对象的实际类型调用正确的函数版本,这被称为**动态联编**。 #### 隐藏(Hide) 隐藏发生在派生类中定义了一个与基类中函数同名的函数,但参数列表不同,无论基类的函数是否被声明为`virtual`。在这种情况下,派生类的函数会隐藏基类的同名函数,这意味着当在派生类中调用这个函数时,只会调用派生类中的版本,而不会考虑到基类中的函数。即使在使用基类指针或引用来访问派生类对象时,也会调用派生类的函数,而不是基类的。 ### 虚拟函数与重载函数的区别 虚拟函数和重载函数在C++中有着明显的区别: 1. **形式上**:重载函数要求有相同的返回值类型和函数名,但参数列表必须不同;而虚拟函数要求返回值类型、函数名和参数列表都相同。 2. **类型**:重载函数可以是成员函数或非成员函数;而虚拟函数必须是成员函数。 3. **调用方式**:重载函数的调用基于参数列表的匹配;虚拟函数的调用基于对象的实际类型。 4. **多态性**:虚拟函数支持多态性,即同一函数名在不同类中有不同的实现;而重载函数不支持多态性。 ### 编译期与运行期的考虑 在C++中,编译期和运行期的概念对于理解和使用多态性至关重要: - **编译期**:在此阶段,编译器解析源代码,检查语法错误,解析符号引用,进行类型检查等。静态联编在此阶段完成,编译器确定函数调用的具体实现。 - **运行期**:这是程序实际执行的阶段。动态联编在此阶段发生,编译器根据对象的实际类型决定调用哪个函数的实现。 ### 封装、继承与多态 这三个概念是面向对象编程的核心,尤其在C++中: - **封装**:封装是将数据和操作数据的函数封装在一起,隐藏内部实现细节,仅暴露必要的接口。这提高了代码的复用性和安全性。 - **继承**:继承允许创建新类,这些新类继承已有类的特性和行为。这促进了代码的复用,使得新类可以扩展或修改已有类的功能。 - **多态**:多态性允许子类以自己的方式实现基类的方法,即相同的接口可以表现出不同的行为。这是通过虚函数和动态联编实现的。 C++的重载、覆盖和隐藏,以及虚拟函数与重载函数的区别,还有编译期与运行期的概念,以及封装、继承和多态的基本原理,都是深入学习C++语言的重要知识点,对于理解和掌握面向对象编程的精髓至关重要。
剩余6页未读,继续阅读
- noreen_yue2013-01-09比较基础 ~
- ti7992013-07-07学习了 比较基础~
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助