c++ - 放弃继承类作为希望继承类的参数
问题描述
好的,我试图将我的问题/问题放在标题中的一句话中。我有以下代码示例:
class ParentClass
{
};
//#include "ParentClass_Header.h"
class SomeOtherClass
{
ParentClass* parent;
public:
virtual void func(ParentClass* parentclass) {
parent = parentclass;
}
};
class ChildClass : public ParentClass
{
public:
};
void SomeOtherClass::func(ChildClass* childclass)
{
}
无论如何,我有一个继承给 ChildClass 的 ParentClass。另一个 (SomeOtherClass) 类必须保存有关 ChildClass 的一些信息(函数 SomeOtherClass:func(...) 中需要指针)。
编译器说 ChildClass* 之类的东西不能在 ParentClass* 中转换。我认为不可能按照我试图做到的方式做到这一点。另一种方法是声明一个 ChildClass* child_ptr 并在任何成员函数(属于 ChildClass 类)中为其分配 child_ptr = this。但是很高兴知道是否有另一种可能更专业的方式。
解决方案
你的声明和定义func
是不同的,在类声明中你给它一个参数,ParentClass *
而你用ChildClass*
. 如果您只希望它采用 aChildClass*
作为参数,则将其声明为参数,反之亦然,如果您希望函数采用任何 derived ParentClass*
。
但是,从您对“孩子”和“父母”的命名来看,我会说代码似乎与其目标混淆了。子类从父类派生是不正常的,相反,您会期望父类具有某种形式的容器来管理子类。在这种情况下,如果孩子需要与父级进行反向通信,则应该在构造函数中传递父级。
推荐阅读
- sql - SQL连接两个表,只选择一个ID
- spring - 具有多表的 UserDetailsService
- java - 在 Eclipse IDE 中调试为 Testng 不起作用
- python-3.x - 如果响应有错误,则尝试更新 urllib 库请求中的 url
- javascript - 强制网络用 d3 拟合边界框
- docker - Elsa + docker 奇怪的 JavaScript 错误
- windows - 你如何在使用 Ansible 的本地策略部分中使用 win_security_policy 模块?
- pathos - 不能在 pathos apipe() 结果上调用 get() 会导致内存使用过多吗?
- javascript - 用于 json 数组和动态多级数组检查的正则表达式模式
- r - 绘制 tsibble 时如何获得更详细的 x 轴?