需要继承类的对象在定义类之前是可见的

Need objects of inheriting classes to be visible before classes are defined

本文关键字:继承 对象 定义      更新时间:2023-10-16

通常您会声明和定义基类,然后在声明继承类的对象之前对继承类做相同的操作。不幸的是,由于可见性的原因,我需要在定义继承类之前声明对象(尽管在定义基类之后)。

我认为我可以为继承类做一个前向声明,但是如果我这样做:

class BaseClass
{
    //content
};
class InheritingClass;

它不会识别它正在继承,但是如果我这样做。

class BaseClass
{
    //content
};
class InheritingClass: public BaseClass;

编译器希望我完成定义。有可能使我描述的情况有效吗?

我在编译器中尝试过。你可以声明另一个与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);
}

前向声明不是定义。因此class InheritingClass: public BaseClass;没有任何意义。但是,您可以先进行前向声明,然后再进行定义:

class base;
class derived;
// ...
class base {};
class derived : public base {};