有关虚拟函数继承的问题,大家来看看 我的问题是这样的,现在有个类class A{ virtual func1(){} func2(){}}请问:如果类B继承了类A,在类B中改写了函数func1()和func2()有什么区别呢?也就是加虚拟函数和不加虚拟函数有什么区别呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 A a;B b;A * p1 = (A*)&b ;p1->fun1();调用的是B类的fun1 技术上可行符合你的要求吗?如果不明白,你可以(1),给我发短消息(请附帖子的地址).(2),根据http://www.vcshare.net上的联系方式与我联系,业余时间推荐QQ,工作时间推荐发到我论坛.(3),如果问题简单,请在http://www.vcshare.net/bbs/default.asp上发帖. 如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖. 同时在www.csdn.net上发帖,并给出在我的论坛的链接.---------------压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.如果程序比较大(1),请写好注释,否则会很头痛.(2),注明那些类是自己写的,那些是下载的.用户名:guest ,guest1,guest2,guest3,guest4密码都是: 123 加虚拟函数和不加虚拟函数有什么区别呢?加虚拟函数可以实现动态调用,如上面兄台根据类来调用函数不加虚拟函数没有动态,如:A * p1 = (A*)&b ;p1->fun2();调用的是A类的fun2 虚拟函数 是 为了实现多态性。所谓的多态 简单说就是在通过基类指针调用虚函数时,会自动判断该指针指向的对象本质上是基类对象还是派生类对象,然后调用正确的虚函数。比如class A //基类{ virtual func1(){} func2(){}};class B //继承类{ /*virtual 这个可以不要,虚函数在派生类中自动为虚函数*/ func1(){.....} func2(){.....}}A a;B b;A * p1 = (A*)&b ;p1->fun1();//调用的是B类的fun1p1 = &a;p1->fun1();//调用A类的fun1 而你通过p1调fun2则两次调用的都是类A的fun2因为fun2不是virtual的,不能实现多态。 <深入浅出mfc> 有一个虚拟函数的例子讲得易懂,你可以看一下 sdk编程关于子窗口键盘响应的问题 插入大数据库量问题???????? vc 资源问题 请问关于界面皮肤的问题 已经完成视频的编码和解码,测试时使用的是TCP,很正常,但是点对点的传输效率太低,有好的方法吗? 求在多文档中注册 多个菜单 多个工具栏的方法??? 请教AfxParseURL的问题? 怎么通过分析ip包知道该机器在用代理(下面多台机器用该代理上网),高手指点! 菜鸟问题读写文件高手请帮忙 请问,中文版的SP4在哪里? 如何抓取鼠标光标,并保存为光标资源文件? 用FtpFindFirstFile得到文件的最后修改时间,当本地系统时间小于文件修改时间时,得到的时间会少一年,怎么处理?
B b;A * p1 = (A*)&b ;
p1->fun1();调用的是B类的fun1
符合你的要求吗?
如果不明白,你可以
(1),给我发短消息(请附帖子的地址).
(2),根据http://www.vcshare.net上的联系方式与我联系,业余时间推荐QQ,工作时间推荐发到我论坛.
(3),如果问题简单,请在http://www.vcshare.net/bbs/default.asp上发帖.
如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
同时在www.csdn.net上发帖,并给出在我的论坛的链接.
---------------
压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.
如果程序比较大
(1),请写好注释,否则会很头痛.
(2),注明那些类是自己写的,那些是下载的.
用户名:guest ,guest1,guest2,guest3,guest4
密码都是: 123
加虚拟函数可以实现动态调用,
如上面兄台
根据类来调用函数
不加虚拟函数
没有动态,
如:
A * p1 = (A*)&b ;
p1->fun2();调用的是A类的fun2
class A //基类
{
virtual func1(){}
func2(){}
};class B //继承类
{
/*virtual 这个可以不要,虚函数在派生类中自动为虚函数*/
func1(){.....}
func2(){.....}
}A a;
B b;A * p1 = (A*)&b ;
p1->fun1();//调用的是B类的fun1
p1 = &a;
p1->fun1();//调用A类的fun1
因为fun2不是virtual的,不能实现多态。