当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:54:00  来源:本站整理

C++若何处理内联虚函数[VC/C++编程]

赞助商链接



  本文“C++若何处理内联虚函数[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

当一个函数是内联和虚函数时,会发生代码替换或利用虚表调用吗? 为了弄 清楚内联和虚函数,让我们将它们脱离来考虑.普通,一个内联函数是被展开的 .

class CFoo {
    private:
      int val;
    public:
      int GetVal() { return val; }
      int SetVal(int v) { return val=v; }
    };

这里,假如利用下列代码:

CFoo x;
x.SetVal(17);
int y = x.GetVal();

那么编译器产生的目标代码将与下面的代码段一样:

CFoo x;
x.val = 17;
int y = x.val;

你当然不能这么做,因为val是个私有变量.内联函数的长处是不用函数调用 就可以躲藏数据,仅此罢了.

虚函数有多态性,意味着派生的类能实现相同的函数,但功效却差别.假定 GetVal 被声明为虚函数,并且你有第二个 以差别办法实现的类 CFoo2:

class CFoo2 : public CFoo {
    public:
    // virtual in base class too!
    virtual int CFoo2::GetVal() {return someOtherVal;}
    };

假如 pFoo是一个 CFoo 或 CFoo2 指针,那么,无论 pFoo 指向哪个类 CFoo 或 CFoo2,成员函数 pFoo->GetVal 都能调用成功.

假如一个函数既是虚拟函数,又是内联函数,会是什么情形呢?记着,有两 种方法成立内联函数,

第一种是在函数定义中利用关键字 inline,如:

inline CFoo::GetVal() { return val; }

第二种是在类的声明中编写函数体 ,就象前面的 CFoo2::GetVal 一样.所以假如将虚函数体包含在类的声明中, 如:

class CFoo {
    public:
    virtual int GetVal() { return val; }
    };


  以上是“C++若何处理内联虚函数[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

本文地址: 与您的QQ/BBS好友分享!
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .