码家

Web Platform, Cloud and Mobile Application Development

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

虚函数,重写。

 

虚函数表

 

 

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

 

 

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>>里的详细介绍

 

 

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

 

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

 

 

 

这种理论性的东西,不是几句话你就明白的。
多态是通过虚函数来实现的
 
 
 
 
通过虚函数和指针来实现。创建一个基类指针,当它指向不同的对象时,调用的虚函数也不同,这就是多态。
posted on 2011-10-12 14:09  海山  阅读(2381)  评论(0编辑  收藏  举报