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

本文详细解释了C++中的多态实现原理,包括虚函数、虚函数表、延迟绑定等概念,并通过实例展示了如何在实际编程中运用多态特性。重点介绍了静态多态与动态多态的区别,以及如何利用指针和引用实现运行时多态。

虚函数,重写。

 

虚函数表

 

 

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

 

 

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

因为可以用派生类对象来初始化或者给基类类型的指针赋值。

就是基类类型的指针所指向的对象有可能是基类型,也可能是派生类型,所以只有到运行时刻我们才知道指针所指向的对象到底是什么类型,所以当我们通过基类型的指针调用对象的虚函数时,只有判断该对象的类型后才知道调用的虚函数是哪一个类型的版本。

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

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

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

 

 

 

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

而如果你仔细研究C++编译器的实现,就会发现,所谓相同的函数其实在编译之后就变成不同的函数了,因为C++中的函数名被解析成“类名+函数名+参数”。
 
 
 
 

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

 

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

 

 

 

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

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

 

 

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

 

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

 

 

 

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

转载于:https://www.cnblogs.com/yqskj/articles/2208585.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值