diamond-problem

C++: Multiple inheritance + virtual function mess

I have a diamond multiple inheritance scenario like this: A / \ B C \ / D The common parent, A, defines a virtual function fn(). Is it possible for both B and C to define fn()? If it is, then the next question is - can D access both B and C's fn() without disambiguation? I'm assuming there is some syntax for this....

Multiple Inheritance in java.

Java is not allowing inheritance from multiple classes (still it allows inheritance from multiple interfaces.), I know it is very much inline with classic diamond problem. But my questions is why java is not allowing multiple inheritance like C++ when there is no ambiguity (and hence no chances of diamond problem) while inheriting from m...

Acceptable to use virtual inheritance to prevent accidentally creating a diamond?

This is a simplification of some real code, and a real mistake I made when I didn't realize someone else had already implemented Foo and derived from it. #include <iostream> struct Base { virtual ~Base() { } virtual void print() = 0; }; struct OtherBase { virtual ~OtherBase() { } }; struct Foo : public Base { // better to us...

A diamond-inheritance problem

Just for fun I am working on a XUL implementation for Windows. In XUL, UI elements can be written in XML like this: <window width="800" height="600"></window> I am considering a system for getting and setting element attributes. It's working pretty well but I am not certain if the use of diamond inheritance is potentially hazardous he...

Diamond Problem

Wikipedia on the diamond problem: "... the diamond problem is an ambiguity that arises when two classes B and C inherit from A, and class D inherits from both B and C. If a method in D calls a method defined in A (and does not override the method), and B and C have overridden that method differently, then from which class does it inheri...

Java: how do you call this multiple inheritance ambiguity?

Here's an example using multiple interface inheritance in Java and there's an issue. Note that I fully know why there's an issue and this is not the point of my question. The question is about how you name this particular multiple interface inheritance ambiguity, if there's a name for it. For example, in C++, the ambiguity that arises...

C++ multiple inheritance preventing diamond

Is there a way to define a class Foo in C++ so that I can inherit from it I can't "diamond inherit" from it I.e. class Cat: public Foo{} // okay class Dog: public Foo{} // okay class Weird: public Cat, public Dog {} // I want this to throw a compiler error ...

Why is there ambiguity in this diamond pattern?

#include <iostream> using namespace std; class A { public: void eat(){ cout<<"A";} }; class B: public A { public: void eat(){ cout<<"B";} }; class C: public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } I am not sure this...

How does virtual inheritance solve the diamond problem?

class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } I understand the dia...

C++ virtual override functions with same name

Hello there, I have something like that (simplified) class A { public: virtual void Function () = 0; }; class B { public: virtual void Function () = 0; }; class Impl : public A , public B { public: ???? }; How can I implement the Function () for A and the Function() for B ? Visual C++ lets you only define the s...

[C++] Diamond sub-problem: non-multiple inheritance in side branch still require class constructor

Strange problem occurred when I tried to "solve" usual diamond problem in a usual way - using virtual inheritance: A / \* both virtual B C \ / D However my base class A doesn't have default constructor, so I was to call it manually from D. However when I try to add a class E into this diamond as C-inherited A / \* both vir...

C++ - downcasting a diamond shape inherited object without RTTI/dynamic_cast

Hi all! I'm currently working on integrating a third-party package that uses lots of RTTI stuff on a non-RTTI platform (Android). Basically, I did my own RTTI implementation but I'm stuck on a problem. The issue is that a lot of classes are having the diamond inheritance problem since all the classes derive from the same base class (ob...

C++ Weird Diamond inheritance issue

I have this A / \ B C \ / D A has a pure virtual function, prototyped as: virtual A* clone(void) const = 0; B and C virtually inherit from A ( class B: public virtual A, class C: public virtual A) B has the virtual function, prototyped as: virtual B* clone(void) const {}; C has the virtual function, protot...