在C++中继承同一类两次(故意)
Inherit same class twice in C++ (on purpose)
我有一个Circle
类和一个Rectangle
类。 我现在想做一个类FunnyObject
,每个类由一个圆形和两个矩形组成。
如果我这样做:
class FunnyObject:public Circle, public Rectangle, public Rectangle{
//How do I refer to each of the Rectangle classes?
}
由于存在歧义,我如何引用两个 Rectangle 类中的函数和变量?
此外,通常构造函数是:
FunnyObject::FunnyObject:Circle(arguments), Rectangle(arguments){
//....
}
在我的情况下,构造函数的外观如何?
帮助继承的一个简单技巧是考虑">isa"与">has a"。
如果你有一个">是"关系,你就使用继承。如果您具有">具有"关系,则可以创建新的数据成员。
FunnyObject是矩形还是圆形?如果是这样,请继承。
FunnyObject有两个矩形和圆形吗?如果是这样,请创建成员变量。
我有一个圆形类和一个矩形类。我现在想创建一个类 FunnyObject,每个类由一个圆形和两个矩形组成。
使用对象组合而不是继承。
class FunnyObject
{
Circle circle;
Rectangle rectangle1;
Rectangle rectangle2;
}
在这种情况下,您不需要继承,请使用组合:
class FunnyObject
{
Circle myCircle;
Rectangle myRectangle1;
Rectangle myRectangle2;
}
正如你所说:
我有一个圆形类和一个矩形类。我现在想做一个 类FunnyObject,每个由一个圆形和两个矩形组成。
"...每个由一个圆形和两个矩形组成。解决方案就在你自己问题的措辞中。正如@scoohe01所说,一个技巧是在FunnyObject是一个圆形和两个矩形之间进行选择,或者FunnyObject由一个圆形和两个矩形组成。在您的情况下,按照您选择的措辞,您的设计应该与后一种选择相对应。
另一个技巧是你不能继承多次。在您的示例中,您希望从矩形继承两次。假设有一个getSide1()
方法。你会怎么称呼它?getSide1'1()
和getSide1'2()
...只是没有办法。
这也令人困惑。如果你从圆形和矩形继承,你最终会得到一个混合(因此它的名字)与getRadius()
、getSide1()
和getSide2()
等方法。它似乎既有半径又有边,这毫无意义。
最后,还有子类化规则或利斯科夫替换原则。 继承类(FunnyObject?)可以在使用圆形或矩形的所有情况下使用吗?一点也不。好吧,至少以一种有意义的方式。
希望这有帮助。
- 如何创建从同一类继承的不同对象的向量
- 获取从C++中同一类中的构造函数调用的方法返回的值
- C++如何将同一类的实例作为属性
- 如何封装一个函数,以便它只能由同一类中的一个其他函数调用?
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- C++交换来自同一类成员的参数值,处理多个类
- 使用同一类中的方法重新分配字段时出现问题
- 类成员函数无法访问同一类的私有结构节点?
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 有没有办法从同一类中的函子调用类方法?
- 在 c++ 中将对象设置为等于同一类的构造函数是否有效?
- 同一类的两个对象相互引用
- 当两个成员位于同一类中时出错"a nonstatic member reference must be relative to a specific object"
- 如何将一个类的成员函数用作另一类的友元函数
- Poco 计时器,具有来自同一类的回调
- 故意泄漏std::向量的内存
- 如何获取同一类函数中类成员的函数指针?
- C++转换为同一类
- GCC7 在同一类中推断出常量修饰符的存在
- 在C++中继承同一类两次(故意)