从抽象类(c ++)中的静态方法调用非静态方法

时间:2014-01-26 20:17:11

标签: c++ abstract

有人知道在C ++中抽象类中使用静态方法调用非静态方法的解决方法吗?

例如,我有以下抽象类:

class aClass
{
  public: 
   static int check();
   virtual int check_deep()=0;
}

我想调用check_deep()表单check()

提前谢谢, 朱迪思。

3 个答案:

答案 0 :(得分:2)

您需要更改静态方法的签名以接收aClass实例的引用(或指针)来执行此操作:

class aClass
{
  public: 
   static int check(aClass& instance);
   virtual int check_deep()=0;
}

int aClass::check(aClass& instance)
{
     return aClass.check_deep();
}

设计 smells 尽管如此!

答案 1 :(得分:0)

没有。它没有意义,因为非静态方法绑定到类的实例(您引用为this),而静态方法没有绑定到任何实例:没有{{ 1}}将this绑定到check_deep

显然,假设您将从子类调用它,否则check是纯虚拟的,您将无法调用它。

答案 2 :(得分:0)

无法做到这一点。非静态方法需要一个对象作用,在你的情况下,当它是纯虚拟时,对象甚至决定调用哪个确切的方法。你绝对需要一个aClass类型的对象来调用check_deep。