大家进来看看,怎么才能实现下面的要求。

lvshaoqing 2010-02-04 09:08:28

class Base
{
Base()
{}

virtrul void interface1()
{}

}

class Der : public Base
{
virtrul void interface1()
{}
}


class Base
{
Base()
{}

virtrul void interface1()
{}

}

class Der : public Base
{
virtrul void interface1()
{}
}

怎么才能在Base()的构造函数中,调用Der::interface1();
...全文
206 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
好啦。。。。。结贴。。。。。。。谢谢各位。。。。。
你妹的特盗不 2010-02-04
  • 打赏
  • 举报
回复
就算你成功调用了,你的代码都不是规范的代码

你的逻辑很稀奇,复杂的问题应该简单化,用简单的方法去实现
taodm 2010-02-04
  • 打赏
  • 举报
回复
哦,那你看过java的对应代码的“汇编”没有?
Yuchi1989 2010-02-04
  • 打赏
  • 举报
回复
5.当一个构造函数被调用时,它做的首要的事情之一是初始化它的V P T R。因此,它只能知道它是“当前”类的,而完全忽视这个对象后面是否还有继承者。 当编译器为这个构造函数产生代码时,它是为这个类的构造函数产生代码- -既不是为基类,也不是为它的派生类(因为类不知道谁继承它)。 所以它使用的V P T R必须是对于这个类的VTABLE。而且,只要它是最后的构造函数调用,那么在这个对象的生命期内, V P T R将 保持被初始化为指向这个VTABLE。但如果接着还有一个更晚派生的构造函数被调用,这个构造函数又将设置V P T R指向它的 V TA B L E,等.直到最后的构造函数结束。V P T R的状态是由被最后调用的构造函数确定的。这就是为什么构造函数调用是从基类到更加派生 类顺序的另一个理由。 但是,当这一系列构造函数调用正发生时,每个构造函数都已经设置V P T R指向它自己的 VVTABLE。如果函数调用使用虚机制,它将只产生通过它自己的VTABLE的调用,而不是最后的VTABLE(所有构造函数被 调用后才会有最后的VTABLE)。
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
还是汇编好啊。。。汇编告诉我,在基类的构造函数中,虚函数表是基类的,而不是子类的。。。。这才是真理啊。。。
Yuchi1989 2010-02-04
  • 打赏
  • 举报
回复
class Base
{
Base()
{}

virtrul void interface1()
{}

}

class Der : public Base
{
virtrul void interface1()
{a=5;}
int a;
}
如果通过虚机制初始化a,此时还没有a这个变量呢,所以肯定不允许。
taodm 2010-02-04
  • 打赏
  • 举报
回复
要么,你只看了半句;要么,离他远点。
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
他说,这本书讲的很多东西。 现在的编译器已经根本不是这么坐了。 就按照现在的主流的VS来说,微软早已放弃他做的很多东西了。
太乙 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 lvshaoqing 的回复:]
晕倒了。。。。。  我真笨。  看下汇编就知道编译器为什么不行了么。。。。。。  我先看汇编吧。  《深度探索C++对象模型》这本书不推荐看啊。。。  因为已经过时了。  他里面很多东西都是不正确的。。。

[/Quote]

小子竟妄言。。。。。。。。。。。。
hlyces 2010-02-04
  • 打赏
  • 举报
回复
这年头,有那种钻研劲

不去看看其它 的例如算法一些

和规则较劲~~~~~有意思么?
taodm 2010-02-04
  • 打赏
  • 举报
回复
求问谁说的?我好考虑离他远点。
[Quote=引用 27 楼 lvshaoqing 的回复:]
  《深度探索C++对象模型》。。。  因为已经过时了。  他里面很多东西都是不正确的。。。

[/Quote]
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
晕倒了。。。。。 我真笨。 看下汇编就知道编译器为什么不行了么。。。。。。 我先看汇编吧。 《深度探索C++对象模型》这本书不推荐看啊。。。 因为已经过时了。 他里面很多东西都是不正确的。。。
taodm 2010-02-04
  • 打赏
  • 举报
回复
那去看《深度探索C++对象模型》或者《effective c++》第三版item9吧。
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 traceless 的回复:]
为什么不行

楼上不是有人说了吗  难道LZ是不看帖就回帖的呀 Faint~~~
[/Quote]

我看了的。 但我觉得这个应该不是原因才对。 他的意思是说没有虚函数表。。。 但这个不可能的。 因为虚函数表在编译的时候产生。
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
vptr这个我知道的。
Yuchi1989 2010-02-04
  • 打赏
  • 举报
回复
基类构造函数先于派生类构造函数构造,派生类还未构造完全,就去调用派生类的函数,C++标准不允许。
taodm 2010-02-04
  • 打赏
  • 举报
回复
哦,楼主知道虚表vtable啊,那知道vptr么?
traceless 2010-02-04
  • 打赏
  • 举报
回复
为什么不行

楼上不是有人说了吗 难道LZ是不看帖就回帖的呀 Faint~~~
lvshaoqing 2010-02-04
  • 打赏
  • 举报
回复
虚函数表在编译完成后,就已经生成好的。。。。。。。。
jinjinClouded 2010-02-04
  • 打赏
  • 举报
回复
此法不可取
加载更多回复(18)

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧