免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1386 | 回复: 4
打印 上一主题 下一主题

[C++] 关于c++继承问题一点困惑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-11 12:11 |只看该作者 |倒序浏览
我有几点困惑:
1。类A继承类B后,B中的成员被A所有,那么是不是说A中就有这些成员而且也分配了空间?具体的空间中的成员分布有没有什么规矩?要是A类和B类中有同名的成员函数(返回值,参数多一样的)怎么办?只是保留一个拷贝吗?
2。基类的虚函数被A类继承后,A类的同名的函数也变成虚函数,那么在继承类中不是有两个同名的函数,只是函数的实现部分可能会不一样,是不是也得为他们分配实在的空间,编译器在处理是怎么区分这两个函数呢??

请指教!!!

论坛徽章:
0
2 [报告]
发表于 2003-07-11 14:45 |只看该作者

关于c++继承问题一点困惑

类A继承类B后,B中的成员被A所有,A的实例当然也为这些成员分配了空间,成员分布是先B的成员,然后A的成员,只有这样才能把B的实例作为基类A的实例使用。
同名函数称为覆盖overriding,函数都在,不是一个拷贝,由编译器根据程序上下文和标准中规定的规则决定什么时候调用哪个。因为名字会被mangle,所以实际上在obj里的名字是不同的。

论坛徽章:
0
3 [报告]
发表于 2003-07-11 18:28 |只看该作者

关于c++继承问题一点困惑

这要理解对象在内存中的保存格式

对象的成员函数并不占地址
它们只是有一个指针指向实现部分代码

而不是每个对象都保存一份代码

论坛徽章:
0
4 [报告]
发表于 2003-07-12 09:51 |只看该作者

关于c++继承问题一点困惑

多谢了,不过无双能不能讲的仔细一点!!
比如
class a
{
private:
   int a;
public:
  void put(){}
  void get(){}
}

class b::public a
{
private:
  int x ,y;
public:
  
  void put(){}
  void get(){}
  void out(){}

}

则这两个类的具体的成员函数在内存中分配情况,请讲一下。(没包括虚函数)

论坛徽章:
0
5 [报告]
发表于 2003-07-14 12:32 |只看该作者

关于c++继承问题一点困惑

它们每个类中指针指向自己的函数实现地址

没有定义成虚函数的话 那么就没有虚函数表 调用时直接调用指向的地址

如果有虚函数 那么会有一个虚函数表

可以看这里
http://www.156ok.com/article/article_list.asp?account_id=825

使用google查找虚函数表得到
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP