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