首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

虚函数的调用指令,该如何解决

2012-03-03 
虚函数的调用指令为什么在构造函数比成员函数里调用虚函数的汇编指令更少,在类外调用虚函数的汇编指令和在

虚函数的调用指令
为什么在构造函数比成员函数里调用虚函数的汇编指令更少,在类外调用虚函数的汇编指令和在构造函数里一样?
具体的代码如下:
class   Text  
{
          public:
                  Text()
                  {
                              F();
                              //汇编指令:
                              //004115FC     mov                   ecx,dword   ptr   [this]  
                              //004115FF     call                 Text::F   (41128Ah)  
                  }    

                  virtual   void   F()
                  {}        

                  void   T()
                  {
                              F();
                              //00411693     mov                   eax,dword   ptr   [this]  
                              //00411696     mov                   edx,dword   ptr   [eax]  
                              //00411698     mov                   esi,esp  
                              //0041169A     mov                   ecx,dword   ptr   [this]  
                              //0041169D     mov                   eax,dword   ptr   [edx]  
                              //0041169F     call                 eax    
                              //004116A1     cmp                   esi,esp  
                              //004116A3     call                 @ILT+450(__RTC_CheckEsp)   (4111C7h)  
                  }      
};

int   main()
{
          Text   t;
          //0041153E     lea                   ecx,[t]  


          //00411541     call                 Text::Text   (4110CDh)  
          t.F();
          //00411546     lea                   ecx,[t]  
          //00411549     call                 Text::F   (41128Ah)  
          t.T();
          //0041154E     lea                   ecx,[t]  
          //00411551     call                 Text::T   (41104Bh)  
}

请知道的朋友解释下

[解决办法]
构造函数里不会调用虚函数的。
因为构造函数只负责本类成员的构造,它不知道而且应该不管子类是怎样的。
[解决办法]
虚函数请用指针调用.
Text *t=NULL;
t=new Text();
t-> f
[解决办法]
只有使用指针的时候才能体现多态

[解决办法]
继承类的构造顺序是父类---> 子类,要是在构造函数中可以调用虚函数,那么如果父类中调用了父类的某个虚函数,此时这个虚函数指向子类里相应的函数,可是此时子类都没初始化好,其方法就被调用了,这就要出问题了。
[解决办法]
上面漏了几个关键的几个字
父类的构造函数中

继承类的构造顺序是父类---> 子类,要是在构造函数中可以调用虚函数,那么如果在父类的构造函数中调用了父类的某个虚函数,此时这个虚函数指向子类里相应的函数,可是此时子类都没初始化好,其方法就被调用了,这就要出问题了。

热点排行