我正在尝试创建一个抽象类,它允许您调用方法Fun
,这是静态的,打印"Abstract Class"
但是,它不起作用,因为我正在使用{{1在静态方法中。我对如何解决这个问题很困惑:
*this
答案 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
}
但是,我不确定为什么你需要这样的东西,为什么你需要虚拟功能呢?