对 c++多态性和虚函数的理解

来源:互联网 发布:小额网络个人信托公司 编辑:程序博客网 时间:2024/05/18 03:54

一个操作随着所传递或捆绑的对象类型的不同能够做出不同的反应,其行为模式称为多态。

在编译器中,只有加上virtual的成员函数,才被编译器做滞后处理,滞后的间接效应,解决了重要的多态问题,使得使用类的用户可以与以前基于对象的编程保持一致,进行抽象编程。如果编程语言只有类定义机制而没有虚函数的处理方式,则它仅仅能实现类编程和使用类编程分离,获得一些数据封装和数据隐蔽的好处,但在使用继承结构体系的类编程中,为了表现重要的多态而失去了更宝贵的的抽象编程性,可谓鱼和熊掌不可兼得。我们当然要说,类机制本身若不能支持多态编程,那只能获取一定程度的抽象编程,只能是基于对象的编程,不是完全的面向对象编程。

编译器看见虚函数调用,就要做滞后处理。由于间接访问比直接访问绕了一个弯,于是付出了时间代价和保存若干地址指针的空间代价。为了在使用类的编程中随时随地体现多态性,只要是继承结构,应尽量将成员函数设计成虚函数。

当然,使用虚函数也会有如下的限制:

1.      只有类的成员函数才能被声明为虚函数

2.      静态成员函数不能是虚函数

3.      内联函数不能是虚函数

4.      构造函数不能是虚函数

5.      析构函数可以是虚函数而且通常声明为虚函数

原创粉丝点击