找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 630|回复: 9

看看这个代码错在哪里.代码不多.

[复制链接]
发表于 2009-11-3 03:39:11 | 显示全部楼层 |阅读模式 IP:江苏扬州
考试题.但真找不出有错.请问错在哪里.??
指出下面程序中的错误,在错误处说明出错原因
class A {
public:
A( ) { func(); }
Virtual void func() = 0;
};
main()
{}
发表于 2009-11-3 03:39:11 | 显示全部楼层 IP:江苏扬州
func()=0虚拟不让调用
回复

使用道具 举报

发表于 2009-11-3 03:39:12 | 显示全部楼层 IP:江苏扬州
和纯虚函数没关系,错误在于构造函数中调用虚拟函数
回复

使用道具 举报

发表于 2009-11-3 03:39:14 | 显示全部楼层 IP:江苏扬州
class A {
public:
A( ) { func(); }
virtual void func(){}
};
main()
{}

这个是正确的
回复

使用道具 举报

发表于 2009-11-3 03:39:16 | 显示全部楼层 IP:江苏扬州
不是正确的,我说过了错误在于不能在构造函数中调用这个虚拟函数
在 C++ 中,不能从某个类的构造函数中调用派生的虚拟函数,因为虚表还没有完全建立,因为在最底层派生的构造函数执行之前,虚表还没有完全被初始化
而程序中的的func肯定是派生类重载的了
回复

使用道具 举报

发表于 2009-11-3 03:39:18 | 显示全部楼层 IP:江苏扬州
try this:

  1. #include <iostream>
  2. using namespace std;

  3. class A
  4. {
  5. public:
  6. A( )
  7. {
  8. func();
  9. }
  10. virtual void func();
  11. };

  12. //void A::func(){ cout<<"hello"<<endl;} // 大家比较一下这一行隐去和不隐去会有什么区别
  13. // 有一点是明确的, 如果函数被申明为纯虚函数, 那么有没有定义都是不行的.
  14. main()
  15. {
  16. A a;
  17. return 0;
  18. }
复制代码
回复

使用道具 举报

发表于 2009-11-3 03:39:20 | 显示全部楼层 IP:江苏扬州
我还是没有理解aogun给我的讲解
我又走回来,打算把我的想法说出来,希望大家改正
我认为,主要原因还是纯虚函数不能调用
而隐含的问题是构造函数中虚函数不是虚函数,可以看成一个普通函数
所以LZ的虚函数没有其实际作用.
因为构造函数中前面有this指针,根本就不可能调用子类的虚函数(c#之所以可以大概就是这里的this也是指针,考虑了虚拟吧)
而aogun说的没有建立虚函数表,我认为不成立.
因为这里如果你想调用子类的虚函数条件就是需要有指针和引用
而这里有了指针和引用就意味着已经建立完了子类
同时虚函数表也应该完成了,所以只是这里虚拟不能调用而已
回复

使用道具 举报

发表于 2009-11-3 03:39:21 | 显示全部楼层 IP:江苏扬州
在 C++ 中,不能从某个类的构造函数中调用派生的虚拟函数,因为虚表还没有完全建立,因为在最底层派生的构造函数执行之前,虚表还没有完全被初始化

指向虚拟函数表的指针是在构造函数里最先被分配的内存,基类的虚拟函数指针指向的虚拟函数表被子类继承(基类构造又是在子类构造函数的前导中完成的,所以子类的虚拟表的长辈已经诞生了),子类又创建一个虚拟指针来指向这个继承的虚拟函数表(修改以后的虚函数表),子类构造函数里的首先是为虚拟指针分配内存.为什么不能调用?


//void A::func(){ cout<<"hello"<<endl;} // 大家比较一下这一行隐去和不隐去会有什么区别


隐去不是没实现吗?调用什么啊?
回复

使用道具 举报

发表于 2009-11-3 03:39:23 | 显示全部楼层 IP:江苏扬州
我说的不能调用是没有虚拟的效果
回复

使用道具 举报

发表于 2009-11-3 03:39:25 | 显示全部楼层 IP:江苏扬州
指向虚拟函数表的指针是在构造函数里最先被分配的内存

真的么,这个好东西
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:23 , Processed in 0.129375 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表