Example 1. without virtual keyword / Using scope resolution
#include <iostream>
using namespace std;
class classA {
public:
int a;
};
class classB : public classA {
public:
int b;
};
class classC : public classA {
public:
int c;
};
class classD : public classB, public classC {
public:
int d;
};
int main() {
classD objD;
//objD.a; Error
objD.classB::a = 100; // this way is correct
objD.classC::a = 200;
cout<<"A from classB = "<<objD.classB::a<<endl;
cout<<"A from classc = "<<objD.classC::a<<endl;
objD.b = 10;
objD.c = 20;
objD.d = 30;
cout<<"B = "<<objD.b<<endl;
cout<<"C = "<<objD.c<<endl;
cout<<"D = "<<objD.d<<endl;
return 0;
}
//Output:
A from classB = 100
A from classc = 200
B = 10
C = 20
D = 30
_______________________________________________________________-
Example 2. Using Virtual Kwyeord
#include <iostream>
using namespace std;
class classA {
public:
int a;
};
class classB : virtual public classA {
public:
int b;
};
class classC : virtual public classA {
public:
int c;
};
class classD : public classB, public classC {
public:
int d;
};
int main() {
classD objD;
objD.a = 100; // is correct using virtual keyword. we can access a value from one copy.
cout<<"Using Virtual keyword: "<<endl;
classB objB;
objB.a =600;
cout<<"A from class B = "<<objB.a<<endl;
cout<<"A from class D = "<<objD.a<<endl;
objD.b = 10;
objD.c = 20;
objD.d = 30;
cout<<"B = "<<objD.b<<endl;
cout<<"C = "<<objD.c<<endl;
cout<<"D = "<<objD.d<<endl;
return 0;
}
//Output:
Using Virtual keyword:
A from class B = 600
A from class D = 100
B = 10
C = 20
D = 30