爱问知识人 爱问教育 医院库

非静态的成员函数存储及其调用方式

首页

非静态的成员函数存储及其调用方式


        

提交回答
好评回答
  • 2019-04-23 17:37:52
    这是“C++对象模型”的内容。非成员函数,与普通的C全局函数一样,存放在代码段里(汇编层次)ClassA{ (){};}main(){Athea;thea.fun();}自己跟踪一下汇编代码现,调用成员函数时,多push了一个参数,这就是this指针。希望对您有些帮助。

    我***

    2019-04-23 17:37:52

其他答案

    2019-04-23 17:05:07
  •   考虑下面两个类:classBase{ ();};cla { ();};在C++中,类的指针或引用有两种类型:静态类型和动态类型。Base*b;b=newDerived();对于b,它的静态类型是左边的Base,动态类型是右边的Derived。
      如果我这样调用:b->f();那么这就是一个多态调用,因为f()函数是virtual的。虽然我声明的b是Base类型,但实际上,这个f()调用的是Derived类中的f()函数。可以简单地这样说,在C++中,如果用一个类的指针或者引用调用函数,且这个函数是virtual的,那么这个调用就是多态的,意思就是,它会调用那个指针或者引用的动态类型(也就是实际类型)的相应的函数。
      
      否则的话,这个调用便是非多态的,也就是它只会调用这个对象的静态类型的相应的函数。上面我已经说了啊。注意最后一句话,也就是说,除了“类对象指针->虚方法”和“类对象引用。虚方法”外,其他的都是非多态调用。如:Baseb;b。f();这肯定是调用的基类中的f();如果把上面例子中,virtual去掉,那么:Base*b=newDerived;b->f();也是调用的基类中的f(),而不是它实际类型Derived类中的f()。

    张***

    2019-04-23 17:05:07

类似问题

换一换

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):