[学习][记录] c++语言:从放弃到入门 <二>多态

简介: [学习][记录] c++语言:从放弃到入门 <二>多态

多态

多态可分为静态多态动态多态

一、静态多态

静态多态的实现在于静态联编,关联出现在编译阶段而非运行期,用对象名或者类名来限定要调用的函数,称为静态关联或静态联编。

常见有三种方法:

  1. 函数多态(函数与运算符的重载);
  2. 宏多态
  3. 模板多态。

我个人理解就是通过宏、模板生成代码、函数或运算符重载达到多态效果。

1.1 函数多态

1.2 宏多态

1.3 模板多态

二、动态多态

对于动态多态的实现是运行阶段把虚函数和类对象绑定在一起的,即动态联编,动态绑定。具体的说,通过一个指向基类的指针调用虚成员函数的时候,运行时系统将能够根据指针所指向的实际对象调用恰当的成员函数实现。

  • 动态绑定(动态多态),也称为“运行时绑定”,是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
  • 没有virtual修饰,不会发生动态绑定,因此只是运行的父类版本

2.1 父类引用指向子类对象(上转型多态)

多态需要注意的问题

C++ 作为一种面向对象语言,其最重要的一个特征(也是面向对象的最重要的特征之一)是多态和动态绑定。所谓动态绑定,也称为“运行时绑定”,是指在执行期间(非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

没有virtual修饰,不会发生动态绑定,因此只是运行的父类版本

CRTP 也被称为“静态多态”。有些时候,我们编写多态的代码,但是子类并不是运行时才能确定,而是编译时已经确定了(或者我们仅仅是为了重用部分代码才使用了多态机制)。在这种情况下,我们完全可以将“多态”的实现提前到编译期。

相关文章
|
2天前
|
C++
C++一分钟之-继承与多态概念
【6月更文挑战第21天】**C++的继承与多态概述:** - 继承允许类从基类复用代码,增强代码结构和重用性。 - 多态通过虚函数实现,使不同类对象能以同一类型处理。 - 关键点包括访问权限、构造/析构、菱形问题、虚函数与动态绑定。 - 示例代码展示如何创建派生类和调用虚函数。 - 注意构造函数初始化、空指针检查和避免切片问题。 - 应用这些概念能提升程序设计和维护效率。
14 2
|
3天前
|
C++
C++类和类模板——入门
C++类和类模板——入门
9 1
|
5天前
|
存储 C++ 容器
C++一分钟之-变量与数据类型入门
【6月更文挑战第18天】**C++编程基础:变量与数据类型概览** 了解变量(存储数据的容器)和数据类型是编程入门的关键。声明变量如`int age = 25;`,注意初始化和类型匹配。基本数据类型包括整型(int等)、浮点型(float、double)、字符型(char)和布尔型(bool)。理解类型范围和精度,使用字面量后缀增强可读性。深入学习数组、指针、结构体和类,以及动态内存管理,避免数组越界和内存泄漏。不断实践以巩固理论知识。
18 1
|
8天前
|
存储 安全 编译器
【C++入门】—— C++入门 (中)_引用
【C++入门】—— C++入门 (中)_引用
18 5
|
8天前
|
存储 编译器 C语言
【C++入门】—— C++入门 (下)_内联函数
【C++入门】—— C++入门 (下)_内联函数
12 2
|
8天前
|
人工智能 安全 编译器
【C++入门】—— C++入门 (上)_命名空间
【C++入门】—— C++入门 (上)_命名空间
13 2
|
8天前
|
存储 编译器 程序员
【C++高阶】C++继承学习手册:全面解析继承的各个方面
【C++高阶】C++继承学习手册:全面解析继承的各个方面
12 1
|
3天前
|
设计模式 算法 程序员
【C++】大气、正规的编程习惯:C++学习路径与注意事项
【C++】大气、正规的编程习惯:C++学习路径与注意事项
4 0
|
5天前
|
C++
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
C++ 是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的特性
|
8天前
|
JavaScript 前端开发 编译器
【C++初阶】C++模板编程入门:探索泛型编程的奥秘
【C++初阶】C++模板编程入门:探索泛型编程的奥秘
14 0