我的应用程序中有几个类,我希望将类之间的交互限制在基类之外。为了使这个具体,现在我想做这样的事情:
class A
{
data
public:
void method();
};
class A_child : public A
{
//stuff
};
class B
{
public:
B(class A *a);
};
class B_child : public B
{
public:
B_child(class A *a);
B_method(); // does some stuff with data in A and B.
};
虽然实际上每个类都有单独的头文件,但是有很多来回包含...
在A_child的cpp文件中,我希望能够使用B_child(或B,就此而言)。但我不知道如何避免打电话给
void A_child::method()
{
// stuff
B_child *example_B;
example_B = new B_child(this);
example_B->B_method();
// more stuff
}
不一定是
example_B = new B_child(this);
必然,它必须有一些方法将A_child的父类传递给B或B_child的构造函数。
我想做的是避免将B_child定义为:
class B_child : public B
{
public:
B_child(class A_child *a_child);
B_method();
};
而不是我上面所说的,因为这似乎意味着B_child必须使用A_child而不是A.虽然这是真的,但是B或B_child使用的材料中没有任何东西需要A_child - 数据在A,而不是A_child,就足够了。
我猜在C ++中有办法做到这一点?有人可以给我一个例子来说明这样的事情是如何工作的,或者链接到可以解释如何做到这一点的页面?
感谢。
答案 0 :(得分:0)
如果B_child
构造函数使用A *
,您可以将A_child *
传递给它,因为A_child
“是一个”A
(通过公开)遗产)。你尝试过这样做并遇到错误吗?
答案 1 :(得分:0)
您可以在parent
类中添加A
字段:
class A {
B_child* parent;
public:
void setParent(B_child* p) {
parent = p;
}
}
下一个B_child
构造函数:
B_child::B_child(A* a) {
// stuff
a->setParent(this);
}
然后您访问parent
方法中的A_child
对象:
void A_child::method() {
if(parent)
parent->B_method();
}