| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> c++速成日记(多态) -> 正文阅读 |
|
[C++知识库]c++速成日记(多态) |
一、函数名联编1、什么是函数名联编c++语言拥有函数重载,因此编译器在查看函数名的时候,还要查看参数,这种查看的过程,就称之为联编。用白话来说: 将源代码里的函数调用,解释成为执行特定的函数代码块的过程。(举例来说,就是主函数main调用了类里面的fun函数,运行fun函数里面的代码块的这一个过程) 2、动态联编、静态联编一班来说,函数的编译都是在程序运行之前进行的。这样就导致了函数运行的时候,函数调用的代码块已经处于确定状态(静态联编)。而有时我们需要没有提前确定的函数,而是在运行的时候通过不同的类来确定函数对应的代码块(动态联编)。 静态联编(早期联编): 编译的阶段由编译器完成的联编 动态联编(又称晚期联编): 是程序进行的时候,进行的联编。 C++规定:动态联编是在虚函数的支持下实现的。 3、指针和引用的兼容性
?为什么子类不能引用,指向父类?父类派生出子类,子类包含父类,因此子类的数据比父类多。 通过父类指向(引用)子类,可以指出一部分数据(一般就是从父类中继承的数据和函数,会发生一定的变化)。 而子类引用(指向)父类,会导致子类中的内存无法完全储存,导致运用的时候出现错误。(例如子类中新添加了一个int数据,却无法通过父类初始化,里面的数据就会是个不确定数。) 4、实现多态联编的条件
?二、多态一、什么是多态多种形态(状态) 同一个接口,通过不同的对象调用有着不同效果 二、虚函数(virtual)本质就时重写 1、类中声明函数,成员函数前面加入virtual关键子2、虚函数的作用通过类的继承结合虚函数可以实现多态(动态联编) 3、特点*虚函数表:类中有虚函数时,保存虚函数的首地址 (系统自动给予虚函数表:虚函数表的出现是因为有了虚函数,不会也不应该被继承) *虚指针:指向虚函数表(4个字节的指针) *虚函数表不会被继承(表里的东西(项)会被继承) 4、虚函数的限制:
三、实现多态一、条件1、先实现继承 2、继承之中,子类要从父类中继承一个功能不同的虚函数 3、父类指针或者引用父类或者子类对象,对着谁就调用谁的虚函数 二、示例?
运行的结果会是: ?你是没见过喜羊羊! 而如果基类的speak函数没有加虚函数virtual?,运行的结果就会是:
(两者之间的差距,救是动态联编和静态联编之间的区别。前者在编译时确定代码块,可以清晰的发现对应的时子类函数。而后者,在编译之前就已经把主函数里面的speak函数与基类中的代码块一一对应。(编译之前,基类指针自然只会与自己类里面的函数代码块对应。而动态链接对应的则是拥有虚函数关键字的虚函数指针(指向虚函数表的首地址)。) 三、纯虚函数一、概念特殊的虚函数:基类当中不实现函数体,给派生类实现。 写法:virtual返回值类型 函数名 (参数表)=0; 析构函数也能写成纯虚函数。
注意:纯虚析构必须要在类外实现一波。构造函数没有纯虚函数。 二、抽象类1、定义一个类中有一个及以上的纯虚函数。 2、特点不能实例化对象,但是可以创建指针。 3、派生类当中没有完全实现基类中所有的纯虚函数,那派生类也会变成抽象类。 四、final(c++11标准后出现)父类的虚函数或者纯虚函数在子类中仍是虚函数。 不希望父亲的某个函数在子类中被重写。
? |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 9:48:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |