两个派生类在方法

时间:2019-03-16 14:56:00

标签: c++ inheritance types

我遇到的情况与此类似:

B.hpp

class B {...};

D1.hpp

class D1 : B {
    D2 conversion_method(){ D2 d2(); ... return d2; };
}

D2.hpp

class D2 : B {
    D1 conversion_method(){ D1 d1(); ... return d1; };
}

所以这些类需要知道彼此的定义才能返回正确的类型,我将如何处理此类问题?我需要那些方法来返回类型(而不是指针),因为这是接口的要求。

1 个答案:

答案 0 :(得分:2)

这可以完成,但是不能使用内联函数声明。

两个类都需要在其头文件中相互转发声明,即:

class D2;

class D1 : B {
    D2 conversion_method();
}

class D1;

class D2 : B {
    D1 conversion_method();
}

然后,在必须包含两个头文件的第三个头文件或某个.cpp文件中的某个位置,您可以定义两个conversion_method(),因为这两个类的定义现已可用。

通过巧妙地使用其他#include和预处理程序宏处理,可以安排事情,以便一旦两个头文件都获得#include d,就可以实现{{ 1}}()会自动定义。这是通过使每个头文件conversion_method和之后的#define第三个头文件来完成的。第三个头文件检查两个#include是否都存在,然后继续并定义两个#define()。这样可以有效地完成与您的初衷相同的事情。