【多态】c++ 的多态是如何实现的!!!CSDN网友讨论

2021年09月15日 阅读数:2
这篇文章主要向大家介绍【多态】c++ 的多态是如何实现的!!!CSDN网友讨论,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

虚函数,重写。c++

 

虚函数表

 

 

重载多态,强制多态,包含多态,参数多态。
普通函数和类的成员函数的重载属于重载多态,还有运算符重载。
强制多态包括类型强制转换等。
包含多态主要经过虚函数来实现。
参数多态和类模板相关。ide

 

 

C++中的多态只能经过指向基类类型的指针和引用来调用对象的虚函数来实现

由于能够用派生类对象来初始化或者给基类类型的指针赋值。

就是基类类型的指针所指向的对象有多是基类型,也多是派生类型,因此只有到运行时刻咱们才知道指针所指向的对象究竟是什么类型,因此当咱们经过基类型的指针调用对象的虚函数时,只有判断该对象的类型后才知道调用的虚函数是哪个类型的版本。

例如 A是基类型,B是A的派生类,他们都有虚函数c,则
A* a;
B b;
a=&b;
a->c();//这里因为a指向的对象是派生类型b,因此调用的虚函数是派生类的版本。

具体的设计到C++对象模式。建议楼主先看C++ primer ,再看《深刻探索c++对象模型》。

请给我分吧。我打这么多字不容易。。。谢谢函数

 

 

 

多态有2种:静态多态、动态多态。
所谓多态,说到底,不外乎就是相同的函数名,不一样的功能。

而若是你仔细研究C++编译器的实现,就会发现,所谓相同的函数其实在编译以后就变成不一样的函数了,由于C++中的函数名被解析成“类名+函数名+参数”。
 
 
 
 

编译期多态以模板实现,运行期多态运用虚函数表实现。spa

 

虚拟函数表 + 函数的延迟绑定设计

 

 

 

知道一个类在内存中的结构就知道多态是如何实现的了.

了解虚函数表的位置,虚函数表中各个虚函数指针的位置,以及带有继承类的各个成员变量的位置.
虚函数来实现, 我以为有两点重要
1)若是在派生类中从新定义基类的方法, 则将他设为虚函数, 不然为非虚函数  
2)在基类方法的声明中使用关键字virtual可以使该方法在基类以及全部派生类  
包括从派生类派生出来的类的该方法也是虚的--基类
中是虚函数, 则派生类中的该函数也是虚函数, 不管派生类中该方法是否加  
关键字virtual. 可是咱们最好在派生类中为该函数也加上关键字virtual  
 
 
 
虚函数,而后用父类指针或引用指向子类,能够参考<<c++ primer>>里的详细介绍

 

 

说本质应该是延迟绑定
若是考试应该答虚函数 对象指针什么的吧

 

指针和引用,这两个是运行时多态的基石指针

 

 

 

这种理论性的东西,不是几句话你就明白的。
多态是经过虚函数来实现的
 
 
 
 
经过虚函数和指针来实现。建立一个基类指针,当它指向不一样的对象时,调用的虚函数也不一样,这就是多态。