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

时间:2014-08-18 01:01:36

标签: c++ inheritance

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

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

class BaseClass
{
    //content
};

class InheritingClass;

它不承认它是继承但是如果我这样做。

class BaseClass
{
    //content
};

class InheritingClass: public BaseClass;

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

2 个答案:

答案 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);
}