I was going through the diamond problem and thought will work on various scenarios. And this is one among them which I was working on.
#include <iostream>
using namespace std;
class MainBase{
public:
int mainbase;
MainBase(int i):mainbase(i){}
void geta()
{
cout<<"mainbase"<<mainbase<<endl;
}
};
class Derived1: public MainBase{
public:
int derived1;
int mainbase;
Derived1(int i):MainBase(i),derived1(i) {mainbase = 1;}
public:
void getderived1()
{
cout<<"derived1"<<derived1<<endl;
}
};
class Derived2: public MainBase{
public:
int derived2;
int mainbase;
Derived2(int i):MainBase(i),derived2(i){mainbase = 2;}
public:
void getderived2()
{
cout<<"derived2"<<derived2<<endl;
}
};
class Diamond: public Derived1, public Derived2{
public:
int diamond;
int mainbase;
Diamond(int i,int j, int x):Derived1(j),Derived2(x),diamond(i){mainbase=3;}
public:
void getdiamond()
{
cout<<"diamond"<<diamond<<endl;
}
};
int main()
{
Diamond d(4,5,6);
// cout<< d.MainBase::mainbase;
cout<<"tested"<<endl;
cout<<d.mainbase;
cout<<d.Derived2::mainbase<<endl;
cout<<d.Derived1::mainbase<<endl;
/*cout<<d.Derived2::MainBase::mainbase<<endl;
cout<<d.Derived1::MainBase::mainbase<<endl;*/
}
I am now wondering how to I access MainBase class mainbase variable? Any inputs.
You do what you have done there:
But, it might not do what you are trying to achieve. Possibly, you should be using
virtualinheritance? What you have means there will be two copies of theMainBasemembers in your object, one for each inheritance track.(From MSDN).
Probably something like this will suit you better: