黑马程序员技术交流社区
标题:
虚方法
[打印本页]
作者:
冉贵阳
时间:
2012-4-10 08:57
标题:
虚方法
什么是类的虚方法?在具体应用中有什么作用?
作者:
张云静
时间:
2012-4-10 09:09
虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,那个执行时实例化的类叫实例类。
如:飞禽 bird = new 麻雀();那么飞禽就是申明类,麻雀是实例类。
具体的检查的流程如下
1、当调用一个对象的函数时,系统会直接去检查这个对象申明定义的类,即申明类,看所调用的函数是否为虚函数;
2、如果不是虚函数,那么它就直接执行该函数。而如果有virtual关键字,也就是一个虚函数,那么这个时候它就不会立刻执行该函数了,而是转去检查对象的实例类。
3、在这个实例类里,他会检查这个实例类的定义中是否有重新实现该虚函数(通过override关键字),如果是有,那么OK,它就不会再找了,而马上执行该实例类中的这个重新实现的函数。而如果没有的话,系统就会不停地往上找实例类的父类,并对父类重复刚才在实例类里的检查,直到找到第一个重载了该虚函数的父类为止,然后执行该父类里重载后的函数。
作者:
白建新
时间:
2012-4-10 11:08
1、 如果父类方法没有加virtual关键字,即不是一个虚方法,则在子类中只能隐藏基类方法
(new),而不能覆盖(override)。
2、如果父类方法加了virtual关键字,即它是一个虚方法,在子类中一样可以隐藏(new)。
3、如果子类实现了父类相同的方法(相同的方法名称及签名),而没有new,在编译时会报警,但
编译仍然能够通过!
4、调用父类方法:base.方法名()
5、abstract类是一个抽象类,不能被实例化,只能继承
6、最后讲讲重载(overload):是在同一个类中的两个或两个以上的方法,拥有相同的方法
名,函数类型也相同,但是参数却不相同,最常见的重载的例子就是类的构造函数。
实验例子如下:
1、虚方法的概念:
类中的方法声明前加上了virtual 修饰符,我们称之为虚方法;
如: class A
{
public virtual void F(){} //虚方法
}
virtual修饰符表明:该基类(本例中指A类)的派生类(本例中指B类)可以
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2