首页 > 其他分享 >多态

多态

时间:2022-10-10 10:26:27浏览次数:49  
标签:函数 继承 代码 多态 析构 父类

多态

 

多态机制的实现就是通过虚函数。

 

虚函数的原理   虚函数表

单个类的虚函数表

以上结论通过以下代码测试:

运行结果:

 证明内存就是如上分布。

通过调用命令行同样可以证得此结论:

 

 

 使用继承的虚函数表

 

此时:

 代码验证:

运行结果:

 

 

 

使用多重继承的虚函数表

vs中,多重继承时,会继承多个虚函数表(实际是虚表指针,存放顺序按照继承类的声明顺序来);

自己本身的虚函数地址会写入第一个虚函数表的最后;

自己本身的数据成员会写在对象内存最后。

 代码验证:(关键代码)

 结果:

 命令行查看:

 

 

 final

 用来修饰类,让该类不能被继承

理解:使得该类终结!

 

 

 

 

用来修饰类的虚函数,使得该虚函数在子类中,不能被重写

理解:使得该功能终结!

 

 

 

 

override

override仅能修饰虚函数

作用:

1.提示程序的阅读者,这个函数是重写父类的功能。

2.防止程序员在重写父类的函数时,把函数名写错。

 

 

遗失的子类析构函数

 运行结果:

 case3会导致内存泄漏。解决方法:将父类的析构函数定义成虚函数,改动代码如下:

 运行结果:

 此虚函数区别于一般的虚函数,这不是为了重新实现函数功能,而是为了能够动态析构。

 

 

 

纯虚函数和抽象类

 

 

标签:函数,继承,代码,多态,析构,父类
From: https://www.cnblogs.com/ylww/p/16760520.html

相关文章

  • 多态的优势和弊端
    在多态形式下,右边对象可以实现解耦合,便于扩展和维护personp=newStudent();定义方法的时候,使用父类型作为参数,可以接收所有子类对象,体现多态的扩展性与便利。1.多态的优......
  • Java封装、继承、多态、抽象、接口基础知识
    Java封装、继承、多态、抽象、接口基础知识封装面向对象三大特性:封装、继承、多态(四大特性则多一个抽象)定义把对象的属性和方法结合为一个独立的整体,并尽可能隐藏对......
  • Java语言中多态的机制
    1.方法解析Class文件的编译过程中,不包含传统编译中的连接步骤,一切方法的调用在Class文件中存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址。这个特性......
  • 封装继承多态
    封装继承多态封装封装的意义在于保护或者防止代码(数据)被我们无意中破坏。保护成员属性,不让类以外的程序直接访问和修改。隐藏方法细节。关于对象封装的原则:......
  • C# 最基础知识介绍(五)——方法、封装、继承、多态
    C#最基础知识介绍(五)——方法、封装、继承、多态前言......
  • 重识Java第六天打卡----面向对象进阶2【包、权限修饰符、final和static,关键字、常量
    一、包和权限修饰符1.什么是包?包是一种划分类的层次和结构的封装形式,类似于文件管理系统中的文件夹,并且实际也是以文件夹为形式载体的2.包的作用对类文件进行分类管理。给类......
  • Java_多态&抽象类&接口
    Java_多态&抽象类&接口1.多态1.1多态的概述(记忆)什么是多态​ 同一个对象,在不同时刻表现出来的不同形态多态的前提要有继承或实现关系要有方法的重写要......
  • Java基础——多态
    一、类的种类类的多态,接口的多态二、多态类的多态//Person类publicabstractclassPerson{publicabstractvoiddoSomthing();}//Student类public......
  • 超详细Java基础-多态
    茫茫人海千千万万,感谢这一秒你看到这里。希望我的能对你的有所帮助!共勉!愿你在未来的日子,保持热爱,奔赴山海!Java基础知识(多态)多态多态就是指程序中定义的引用变量所......
  • C++自学笔记 多态性的实现 How virtual work in C++
     静态联编所支持的多态性称为编译时的多态性。当调用重载函数时,编译器可以根据调用时所使用的实参在编译时就确定下应调用哪个函数。动态联编所支持的多态性称为运行时......