Including header files of base-classes and sub-classes (derived classes) correctly?
假设我有两个基类,base1和base2。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | // Base1.h #ifndef BASE1_H #define BASE1_H #include"Base2.h" class Base2; class Base1 { ... void func(Base2* b); virtual void subfunc(Base2* b) = 0; ... }; #endif // Base2.h #ifndef BASE2_H #define BASE2_H #include"Base1.h" class Base1; class Base2 { ... void func(Base1 *b); virtual void subfunc(Base1* b) = 0; ... }; #endif |
我在每个头文件中包含彼此的头文件,因为base1有base2作为参数的函数,base2有base1作为参数的函数。
那么假设我有5个子类(派生类)用于base1和base2;
base1_sub1,base1_sub2,base1_sub3,base1_sub4,base1_sub5用于base1base2_sub1,base2_sub2,base2_sub3,base2_sub4,base2_sub5用于base2。
我希望能够有5个base1派生类作为中类函数的参数,比如base2_sub1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Base2_Sub1.h #ifndef BASE2_SUB1_H #define BASE2_SUB1_H #include"Base2.h" // What else to include!? class Base2_Sub1 : public Base2 { ... void subfunc(Base1_Sub1 *b); void subfunc(Base1_Sub2 *b); void subfunc(Base1_Sub3 *b); void subfunc(Base1_Sub4 *b); void subfunc(Base1_Sub5 *b); ... }; #endif |
号
在什么文件中应该包括base1_sub1.h到base1_sub5.h?我还需要base2的子类(如base2_sub1)以同样的方式将base1的子类作为函数参数。
我发现正确地包含这些头是非常令人困惑的,我不知道怎么做。请帮帮我。
如果通过引入forward声明可以避免包含头,则不需要包含头。您的
In what file should
Base1_Sub1.h toBase1_Sub5.h be included?
号
在对应的
I also need subclasses of
Base2 (such asBase2_Sub1 ) to have subclasses ofBase1 as function parameter the same way.
号
就包含头文件的头文件而言,如果可以使用指向
当然,您需要为实例化的类和调用成员函数或访问其数据成员的类包含头。