通常,您将声明并定义基类,然后在声明继承类的对象之前对继承类执行相同的操作。不幸的是,出于可见性原因,我需要在继承类定义之前声明对象(尽管在定义了基类之后)。
我虽然我可以为继承类做一个前向声明,但如果我这样做:
class BaseClass
{
//content
};
class InheritingClass;
它不承认它是继承但是如果我这样做。
class BaseClass
{
//content
};
class InheritingClass: public BaseClass;
编译器希望我完成定义。是否有可能使我描述的情况有效?
答案 0 :(得分:1)
前向声明不是定义。因此class InheritingClass: public BaseClass;
没有任何意义。但是,您可以进行前向声明,然后再进行定义:
class base;
class derived;
// ...
class base {};
class derived : public base {};
答案 1 :(得分:1)
我在编译器中试过这个。您可以声明另一个与base相同的类,并将其用于类型检查,然后在实际定义它时从中派生。据推测,这将是您正在寻找的基类的子类别。但是,它不是确切的类型。如果您不打算对层次结构进行分区,那么我仍然认为基类是您应该使用的,因为这正是您要寻找的。
class base {int unused;};
class base_specific : public base {};
class actual : public base_specific {
public:
actual (int i) : m(i) {}
int m;
};
int main(){
actual x(4);
}