单个父类中的多个相同类实例

Posted

技术标签:

【中文标题】单个父类中的多个相同类实例【英文标题】:Multiple same class instances in single parent class 【发布时间】:2021-02-22 04:29:08 【问题描述】:

我试图在父类中拥有同一类的多个实例。每个都有自己的构造函数参数。

我试过这个,但不知道如何解决这个问题。任何帮助将不胜感激。

Base.h

class Base

    public:
    Base(int a, int b);
;

父.h

#include "Base.h"

class Base_A :Base;
class Base_B :Base;

class Parent : Base_A, Base_B 

    public:
    Parent (int a1, int a2, int b1, int b2);


父.cpp

Parent::Parent (int a1, int a2, int b1, int b2) :Base_A(a1,a2), Base_B(b1,b2)

    //....

编译时出现以下错误:

no instance of constructor "Base_A::Base_A" matches the argument list -- argument types are: (int, int)
no instance of constructor "Base_B::Base_B" matches the argument list -- argument types are: (int, int)

【问题讨论】:

base(int a, int b); 是错字吗? “不确定如何解决” 讲述了一个故事,但没有描述问题。到底发生了什么?正如上面的注释所指出的,您的 Base 类根本没有构造函数。此外,Parent 构造函数是私有的。 抱歉,是的,'base' 是一个错字,我没有为 Parent 构造函数添加公共行。我简化了我拥有的原始代码。 您要解决的实际问题是什么? 您的Base_ABase_B 类都没有显式构造函数。无论如何,这与“多个类实例”无关。暂时摆脱其中一个,专注于构建一切。然后,一旦你弄清楚如何使用仅从 Base_a 继承的 Parent 来做到这一点,那么一切都会变得一清二楚。 【参考方案1】:

您没有Base_A 类和Base_B 类的构造函数(它接受两个整数作为参数)。这正是编译器向我们显示的错误。所以我们需要做的就是定义构造函数。

class Base_A : Base 

public:
    Base_A(int a, int b) : Base(a, b) 
;

class Base_B : Base 

public:
    Base_B(int a, int b) : Base(a, b) 
;

注意:您可能会遇到diamond problem。这是因为Base_ABase_B 都继承自类Base

【讨论】:

这解决了与构造函数相关的编译问题。谢谢!如果我可以更进一步;如何在“Base_A”中使用“Base”固有的方法?例如,假设 Base 有一个方法:“void readSensor()”。如何在 Parent 中访问 Base_A 的方法?当我在 Parent.cpp 的 cpp 文件中添加以下行时:“Base_A::readSensor()”我收到以下错误:“void Base::readSensor() is inaccessible”。 @Misha 这是因为Base_ABase_BBase 有一个私有继承。不仅如此,如果您尝试执行类似Base_A::readSensor() 之类的操作,其中Base_A 中没有函数readSensor() 而在Base 中,它会抛出一个错误,指出该函数未定义。因此,尝试将Base_ABase 的继承设为公共继承(例如:class Base_A : public Base ... ; 并从Parent 调用Base::readSensor() 你是明星。谢谢你,一切都解决了。在 heinzeit 中,公开它的必要性是显而易见的。感谢您的帮助,这已经解决了我遇到的所有问题。您会说上述方法是在“Parent”中获取同一类的多个实例的“最”正确方法吗? @Misha 我不确定你在这里真正想要完成什么,所以我不能说在这种情况下我会做什么。首先你有钻石问题。如果您的目标是拥有多个instances,则不是可行的方法。你也可能想看看Composition over Inheritance。

以上是关于单个父类中的多个相同类实例的主要内容,如果未能解决你的问题,请参考以下文章

类中的继承

重载与重写

重载和重写的区别

重载和重写的区别!

浅谈Overload和Override

子父类中的构造函数