首页 > 解决方案 > 放弃继承类作为希望继承类的参数

问题描述

好的,我试图将我的问题/问题放在标题中的一句话中。我有以下代码示例:

    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。但是很高兴知道是否有另一种可能更专业的方式。

标签: c++inheritanceparameters

解决方案


你的声明和定义func是不同的,在类声明中你给它一个参数,ParentClass *而你用ChildClass*. 如果您只希望它采用 aChildClass*作为参数,则将其声明为参数,反之亦然,如果您希望函数采用任何 derived ParentClass*

但是,从您对“孩子”和“父母”的命名来看,我会说代码似乎与其目标混淆了。子类从父类派生是不正常的,相反,您会期望父类具有某种形式的容器来管理子类。在这种情况下,如果孩子需要与父级进行反向通信,则应该在构造函数中传递父级。


推荐阅读