虚函数

来源:互联网 发布:淘宝自动记账的软件 编辑:程序博客网 时间:2024/04/27 19:12
 
假定一组形状类(如Circle、Triangle、Rectangle和Square等等)都是从基类Shape派生出来的。在面向对象的程序设计中,我们可能要使每一个这样的类都能够绘制其自身形状。尽管每个类都有它自己的draw函数,但是绘制每种形状的draw函数却是大不相同的。当需要绘制形状时,不管它是什么形状,把它作为基类Shape的对象处理是再好不过了。然后,我们只需要简单地调用基类Shape的函数draw,并让程序动态地确定(即在执行时确定)使用哪个派生类的draw函数。
为了使这种行为可行,我们把基类中的函数draw声明为虚函数。然后在每个派生类中重新定义draw使之能够绘制合适的形状。虚函数的声明方法是在基类的函数原型前加上关键字virtual。
一旦一个函数被声明为虚函数,那么它从该点之后的继承层次结构中都是虚函数。
虽然函数在类层次结构的高层中声明为虚函数会使它在底层隐式地成为虚函数,但有些程序员为了提高程序的清晰性更喜欢在每一层中再明确地声明这些函数。
没有定义虚函数的派生类简单地继承其直接基类的虚函数。
如果在基类中将函数draw声明为virtual,然后用指向派生类对象的基类指针调用该函数,则程序会动态地(即在运行时)选择该派生类的draw函数,这称为动态联编。
重定义的虚函数必须和基类虚函数具有相同的返回类型、参数个数和参数类型。
在派生类中重定义的基类虚函数与基类中的版本具有不相同的返回类型和特点是一种语法错误。
如果用名字和圆点成员选择运算符引用一个特定的对象来调用虚函数,则被调用虚函数是在编译时确定(称为静态联编),也就是为该特定对象的类定义的函数或该类继承来的函数。
重载不使用动态联编,在编译的时候编译器就选出了与函数调用特点匹配的函数定义(可能需要用隐式类型转换来实现匹配),它属于静态联编。
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 2岁宝宝门牙有洞怎么办 三岁宝宝有龋齿怎么办 牙龈肿痛脸肿了怎么办 孕妇牙疼的厉害怎么办 智齿引起的牙疼怎么办 蛀牙了有个大洞牙痛怎么办 长了蛀牙牙疼怎么办 面饼表面长黑点怎么办 牙结石自己掉了怎么办 狗狗得了牙结石怎么办 牙结石掉了有洞怎么办 内衣的钩子会掉怎么办? 新胸罩肩带老掉怎么办 牙齿少了一小块怎么办 儿童牙齿有黑斑要怎么办 牙齿又黄又臭怎么办 大牙烂空了很臭怎么办 牙齿已经烂没了怎么办 牙齿已经蛀没了怎么办 牙齿整个蛀掉了怎么办 小孩恒牙长歪了怎么办 孩子换牙长歪了怎么办 9岁门牙磕松动了怎么办 牙齿摔断了一半怎么办 牙齿从根部断了怎么办 牙断了还有牙根怎么办 牙根断在牙龈里怎么办 后槽牙掉了一半怎么办 孩子门牙摔断了怎么办 2岁宝宝牙齿断了怎么办 小孩乳牙摔掉了怎么办 9孩子门牙磕断了怎么办 牙齿断了但没掉怎么办 大人门牙摔断了怎么办 兔子内牙太长了怎么办 牙齿整个摔断了怎么办 大门牙摔断了怎么办 23岁门牙磕断了怎么办 门牙齿断了一半怎么办 牙齿从中间裂开了怎么办 牙齿断了牙根还在怎么办