虚函数

来源:互联网 发布:知行理工 编辑:程序博客网 时间:2024/05/14 09:11

在c++中,虚函数是非常重要的,他实现了多态,没有他c++就不算面向对象了。

虚函数是写到基类里面的,然后让他的子子孙孙去继承。

百度百科上这样说:虚函数的作用是实现动态联编,也就是在程序的运行阶段动态地选择合适的成员函数,在定义了虚函数后,可以在基类的派生类中对虚函数重新定义,在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型。以实现统一的接口,不同定义过程。如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数

所谓动态联编就是说:编译程序在编译阶段并不能确切知道将要调用的函数,只有在程序执行时才能确定将要调用的函数,为此要确切知道该调用的函数,要求联编工作要在程序运行时进行,这种在程序运行时进行联编工作被称为动态联编。

看下面的例子:

 

运行结果:

 

两个类:Base()基类Ex_Class(继承Base)

fun不是虚函数,xu_fun是虚函数,当p_b指向子类的对象时这时候基类中是虚函数的xu_fun,和不是虚函数的fun的区别就体现了出来,这是用p_b分别调用两个函数fun调用的是基类的而xu_fun调用的是子类的这就是动态联编的体现,因为编译时fun已经确定而xu_fun要根据子类的类型在运行是才确定。

虽然Base* p_b指向的是Ex_Class的对象,但是调用子类的一个基类中没有的新函数new_fun是会报错的,因为Base*类型的指针指向子类对象时,他所指向的内存地址只是这个对象中的继承Base类的那那一块所以那一块中没有new_fun这个函数。

//----------------------------------

c++中的类型转换函数:

const_cast,字面上理解就是去const属性。
static_cast,命名上理解是静态类型转换。如int转换成char。
dynamic_cast,命名上理解是动态类型转换。如子类和父类之间的多台类型转换。
reinterpreter_cast,仅仅重新解释类型,但没有进行二进制的转换。

 

 

原创粉丝点击