How can a member function in my derived class call the same function from its base class?

Use Base::f();

Let's start with a simple case. When you call a non-virtual function, the compiler obviously doesn't use the virtual-function mechanism . Instead it calls the function by name, using the fully qualified name of the member function. For instance, the following C++ code...

 

 void mycode(Fred* p)
 {
   p->goBowling();  
 pretend  Fred::goBowling()  is non-virtual
 }

...might get compiled into something like this C-like code (the p parameter becomes the this object within the member function):

 

 void mycode(Fred* p)
 {
   __Fred__goBowling(p);  
 pseudo-code only; not real
 }

The actual name-mangling scheme is more involved that the simple one implied above, but you get the idea. The point is that there is nothing strange about this particular case — it resolves to a normal function more-or-less like printf() .

Now for the case being addressed in the question above: When you call a virtual function using its fully-qualified name (the class-name followed by " :: "), the compiler does not use the virtual call mechanism, but instead uses the same mechanism as if you called a non-virtual function. Said another way, it calls the function by name rather than by slot-number . So if you want code within derived class Der to call Base::f() , that is, the version of f() defined in its base class Base, you should write:

 

 void Der::f()
 {
   Base::f();  
 or, if you prefer,  this->Base::f();
 }

The complier will turn that into something vaguely like the following (again using an overly simplistic name-mangling scheme):

 

 void __Der__f(Der* this)    pseudo-code only; not real
 {
   __Base__f(this);        
 pseudo-code only; not real
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值