C中的(base – > *&Func)()是什么意思

前端之家收集整理的这篇文章主要介绍了C中的(base – > *&Func)()是什么意思前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是简单的类定义,如
  1. class Base{
  2. public:
  3. virtual void Func(){
  4. cout<<"Func in Base"<<endl;
  5. }
  6. };
  7.  
  8. class Derived : public Base{
  9. public:
  10. virtual void Func(){
  11. cout<<"Func in Derived"<<endl;
  12. }
  13. }
  14.  
  15. Base *b = new Derived();

和声明

  1. (b->*&Base::Func)();

调用Func的派生版本,不同于b-> Base :: Func(),它按预期调用基本版本,为什么会发生这种情况,这个调用的含义到底是什么?

解决方法

这个电话的意思是增加冗长.基本上:
expression& Base :: Func是指向成员函数的指针,和
(b-> * x)()是调用成员函数的语法
由x指向b指向的对象.在这
case,因为x是常量,它与写入大致相同
*安培;变量.它意味着与b-> Func()相同.

至于为什么它的行为与b-> Base :: Func不同,它就是
因为Base :: Func是&的操作数.操作符,在哪里
Base ::有一个不同的角色.如果你写了:

  1. void (Base::*pmf)() = &Base::Func;

并呼吁

  1. (b->*pmf)();

你期望正确调用函数.所有你发布的表达式是替换变量pmf不变的.

猜你在找的C&C++相关文章