我有A类,必须实现一些功能。由于实现其中一个需要它自己的数据结构,我假设A包含另一个类B,它具有所有需要的数据结构和功能。但是,B也需要使用A的数据结构和功能。我使用两个类使用前向声明来调用彼此。但仍有问题。例如,我需要在A中公开所有数据结构,以便B可以访问它。我尝试使用友元类,但是当我将B声明为具有实现B功能的子类的抽象类时,我需要将A的所有数据结构公开。因为友元类不适用于继承的子类,所以A的所有数据结构都需要是公共的。这使我的设计相当混乱。
class B;
class A{
protected:
int ds[100];
B * b;
public:
a_func(){
b->b_func();
}
};
class A;
class B{
A * a;
public:
b_func(){
a->a_func();
}
};
class sub_B:public B{
public:
b_func(){
a->a_func();
a->ds ...;
}
}
我的问题是:有没有替代设计?
我也试过使A成为一个抽象类,而B类实现了它的一个函数,但是,当我想要一个A的对象时,构建B的对象在概念上没有意义。
答案 0 :(得分:1)
您不必在类定义中提供成员函数定义:
class A;
class B;
class A {
// no need for public
B * b;
void a_funct(void);
};
class B {
// no need for public here, too
A * a;
void b_funct(void);
};
// the following goes in a source file,
// otherwise you should mark it as inline
void A::a_funct() {
b->b_funct();
}
void B::b_funct() {
a->a_funct();
}
请注意,上面的代码仅作为示例,在其当前形状中,它只不过是一个奇特的无尽(递归)循环。