| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 537 人关注过本帖
标题:[求助]派生的一些问题
只看楼主 加入收藏
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
结帖率:100%
收藏
 问题点数:0 回复次数:3 
[求助]派生的一些问题

类Class B从Class A派生,Class A *a=new Class B(..);

在类A定义实现 虚函数 int function(void) ;在B中也实现该函数,那么上述变量 a->function()将调用那个类的函数;

如果int function(void)不是虚函数又怎样? 谁能给我解析下原因;多谢!

[此贴子已经被作者于2006-6-13 13:12:13编辑过]

搜索更多相关主题的帖子: 派生 
2006-06-13 13:11
aogun
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:638
专家分:0
注 册:2006-4-5
收藏
得分:0 
a->function()将调用类B中实现的function(),如果不是虚函数,那么就调用类A中的
至于为什么,任何一本讲解c++的书上对于虚函数的定义和作用应该解释得很清楚

[此贴子已经被作者于2006-6-13 14:55:55编辑过]


世界上总共有 10 种人,一种懂得什么是二进制 ,一种不懂。
2006-06-13 14:55
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
LZ,注意
new的步骤是先用malloc(strlen(type));
然后再将你需要的转换上去
类Class B从Class A派生,Class A *a=new Class B(..);
这是创建一个CLASS B 无名对象
然后返回这个对象的指针给A
此时A指的是B的对象的 内存单元
所以调用B的函数
如果你不用指针或引用来调用函数,那么函数的 执行只会看前面的对象的类型
因为此时子类的函数把基类的函数给掩盖了
所以单纯的用(.)来操作的话需要看对象的类型来调用相应的函数

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-06-13 20:17
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
以下是引用anthony634在2006-6-13 13:11:37的发言:

类Class B从Class A派生,Class A *a=new Class B(..);

在类A定义实现 虚函数 int function(void) ;在B中也实现该函数,那么上述变量 a->function()将调用那个类的函数;

如果int function(void)不是虚函数又怎样? 谁能给我解析下原因;多谢!


类Class B从Class A派生,Class A *a=new Class B(..);
如果int function(void)不是虚函数:则只看a是什么类型的指针,也就是说a->function()将调用a的类型定义中的function();
书上说了有这样一个规则:
“如果以一个基类之指针指向一个派生类之对象,那么通过该指针你就只能调用基类所定义之成员函数”
然而,虚拟函数就是为了对这条规则反其道而行的设计。所以调用的便是B中的成员函数

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2006-06-13 21:07
快速回复:[求助]派生的一些问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017040 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved