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
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter