写出下面Java源程序的扩展名是功能

c程序练习1_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
c程序练习1
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢VB_填空练习答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
VB_填空练习答案
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩12页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢百度题库旨在为考生提供高效的智能备考服务,全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效服务,助您不断前行!
京ICP证号&&
京网文[3号&&
Copyright (C) 2017 BaiduFuncA called
FuncB called
FuncA called
FuncB called
FuncA called
FuncBB called
FuncA called
FuncB called
FuncA called
FuncBB called
FuncAB called
FuncBB called
FuncAB called
FuncBB called
FuncA called
FuncB called
本题考查知识点:父类指针指向子类实例对象,调用普通重写方法时,会调用父类中的方法。而调用被子类重写虚函数时,会调用子类中的方法。
再次说明了,子类中被重写的虚函数的运行方式是动态绑定的,与当前指向类实例的父类指针类型无关,仅和类实例对象本身有关。
1.b.FuncA();输出
FuncA called
FuncAB called
2.b.FuncB();输出
FuncBB called
上两者好理解,直接调用类B的相应成员函数
3.pa-&FuncA();输出
FuncA called调用类A的FuncA()
4.pa-&FuncB();输出
FuncBB called调用类B的FuncB(),原因是C++的动态决议机制,当基类函数声明为virtual时,指向派生
类对象的基类指针来调用该函数会选择派生类的实现,除非派生类没有才调用基类的虚函数。还有一点注
意的是:指向基类类型的指针可以指向基类对象也可以指向派生类对象,如pa=&b;
pa2-&FuncA();
pa2-&FuncB();输出
FuncA called
FuncB called
这也好理解,直接调用类A的相应成员函数
C++primer p479:只有虚函数的成员函数才进行动态绑定,成员函数认为非虚函数,非虚函数不进行动态绑定
关于第一条输出语句。这条语句具有迷惑性,虽然用基类指针指向子类对象,但是,动态绑定所适用的函数必须是虚函数。而该语句调用的是普通函数,虽然子类重写了并且可能将父类的同名函数隐藏,但是由于是使用基类指针,仍然会调用基类的那个普通函数。
实现多态的三个条件:
1、要有继承
2、虚函数重写
3、父类指针(引用)指向子类对象
同时满足以上条件才可以实现多态
有关于C++动态绑定和静态绑定可以参考:
_/article/details/
(全部复制链接转到)
一般情况下,只有虚函数才使用的是动态绑定,其他的全部是静态绑定。
父类指针指向子类实例对象,调用普通重写方法时,会调用父类中的方法。而调用被子类重写虚函数时,会调用子类中的方法。
说明了子类中被重写的虚函数的运行方式是动态绑定的,与当前指向类实例的父类指针类型无关,仅和类实例对象本身有关。
pa2是A类的实例。virtual关键字实现多态,函数重写只可能发生在父类和子类之间,被重写的虚函数可表现出多态特性,
pa2-&FuncA();这只是在父类(A类)里面,所以不存在多态特性。输出FuncA called\n。
pa2-&FuncB();同上,输出FuncB called\n pa =
&b;基类的指针pa指向了子类的对象,如果是虚函数,会有多态特性,会调用子类定义的重写函数,所以,
pa-&FuncA(); 不是虚函数,没有多态,输出FuncA called\n
pa-&FuncB();B类中,有虚函数,输出子类中定义的重写函数,FuncBB
called\n 所以选B。刚开始学,我的理解对吧?
pa = &b;//父类的指针或者引用都可以指向或引用子类,发生动态绑定,只对虚函数
p2是A类的实例。。。怎么会调用虚函数呢。。
嗯,首先,指针本身的类型是A,那么他调用成员函数的时候回找类型指向的函数,而对于虚函数,他在类内有实际的地址,那么地址是B的地址,则会找到B类内实现的虚函数。
注意 class
A 中的funcA()不是虚函数
类型兼容3规则:
共有派生类对象
1,可赋值给基类对象
2,可初始化基类引用
3,可赋值给基类指针
但这种替代仅发挥基类作用,即只能访问从基类继承的成员。
虚函数下才动态联编运行时绑定。
只有是指针的,并且是虚函数才会调用子类重写方法
谈谈自己对虚函数的理解吧:
首先对象是没有虚函数表的,其次你想调用后面的,至少得分配到了后面的空间(子类的空间),不然你是没办法调用的,还是调用自己了
1、用类对象的基类指针来调用该函数会选择派生类的实现,除非派生类没有才调用基类的虚函数。
这解释了pa-&FuncB();为什么不是“FuncB called”
因为在前面,pa =
&b;即基类的指针pa指向了子类的对象。我以为此处与普通函数一样会使指针范围坍缩至子类中的基类部分,但虚函数确实不一样 :)
1、用类对象的基类指针来调用该函数会选择派生类的实现,除非派生类没有才调用基类的虚函数。
2、指向基类类型的指针可以指向基类对象也可以指向派生类对象。
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
京ICP备号-4
扫一扫,把题目装进口袋

我要回帖

更多关于 C编译程序是 的文章

 

随机推荐