C ++使用* this从静态方法调用抽象方法

时间:2014-02-15 11:33:57

标签: c++ class this abstract

我正在尝试创建一个抽象类,它允许您调用方法Fun,这是静态的,打印"Abstract Class"但是,它不起作用,因为我正在使用{{1在静态方法中。我对如何解决这个问题很困惑:

*this

2 个答案:

答案 0 :(得分:1)

您可能无法以这种方式调用方法__Fun,因为它需要类的实例,但反过来您可能无法创建抽象类的对象。 您的类定义也是无效的,因为纯指定符只能在成员函数声明中使用。函数定义可能没有纯说明符。

要实现你想要的,你可以编写例如

#include <iostream>

class A
{
protected:
    virtual void __Fun() = 0;
public:
    static void Fun( A &instance )
    {
        instance.__Fun(); // 'this' may only be used in nonstatic member functions
    }
};

void A::__Fun()
{
    std::cout << "Abstract Class";
}

class B : public A
{
    virtual void __Fun() { A::__Fun(); }
};


int main()
{
    B b; // Throws - which is good: class is abstract
    A::Fun( b ); // Desired result
}

答案 1 :(得分:1)

Myabe你想要的不是创建一个抽象类,而是一个带有私有构造函数的类(如单例)?

class A
{
private:
    A()
    {
    }
    virtual void __Fun()
    {
        std::cout << "Abstract Class";
    }
    static void _Fun(A &instance)
    {
        instance.__Fun();
    }
public:
    static void Fun()
    {
        A a;
        _Fun(a);
    }
};

int main()
{
    A a; // Throws - which is good: constructor is private
    A::Fun(); // Desired result
}

但是,我不确定为什么你需要这样的东西,为什么你需要虚拟功能呢?