将父类传递给另一个类的构造函数
Pass parent class to constructor of another class
我的应用程序中有几个类,我希望将类之间的交互限制在基类中。为了使它具体化,现在我想这样做:
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++中做到这一点?有人能给我一个例子,如何像这样的工作或链接到一个页面,可能会解释如何做到这一点?
谢谢。
如果B_child
构造函数接受一个A *
,您可以传递一个A_child *
给它,因为A_child
"是一个"A
(通过公共继承)。您是否尝试这样做并遇到错误?
可以在A
类中添加parent
字段:
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);
}
然后在A_child
方法中访问parent
对象:
void A_child::method() {
if(parent)
parent->B_method();
}
相关文章:
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 关于复制构造函数的一个棘手问题
- C++构造函数,一个用于度,一个用于弧度
- 关于QLIST类型实例复制构造函数的一个奇怪问题
- 需要使班级(long_number)用构造函数和一个打印功能代表1到60的任何长度
- 运算符 = 不匹配,构造函数创建一个指针
- 为什么我不能在 c++ 类中声明一个空构造函数,该构造函数从一个具有私有构造函数的构造函数扩展而来
- 如何使构造函数接受一个非常量对象
- 初始值设定项列表,可变参数模板和构造函数推导:一个奇怪的情况
- shared_ptr的原始指针构造函数是一个错误吗?
- 当这个构造函数接受一个初始值设定项列表并委托一个向量时,是什么导致它委托给自己
- C++11使variadic构造函数了解一个初始化列表的初始化列表
- 为什么这个initializer_list构造函数是一个可行的重载
- 为什么我的Arduino类构造函数需要一个参数
- 内联构造函数和一个定义规则
- 如何通过构造函数将一个类的实例传递给另一个类
- 如何用g++构造在另一个文件中定义的类
- 在另一个类中使用自定义构造函数声明一个类
- 如何从另一个构造函数调用一个c++类的构造函数
- 模板中的构造函数不同:一个用于字符串,另一个用于其他任何东西