Upcoming SlideShare
×

# Virtual base class

1,607

Published on

Published in: Education, Technology
0 Likes
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

• Be the first to like this

Views
Total Views
1,607
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
0
0
Likes
0
Embeds 0
No embeds

No notes for slide

### Virtual base class

1. 1. VIRTUAL BASE CLASS
2. 2. DIAMOND PROBLEM Base Class Derived 1 Derived 2 Derived 3
3. 3. EXAMPLEclass one{ public: int a; public: one() { cout<<"onen"; }};class two : public one{ public: int a2; public: two(){ cout<<"twon"; }};
4. 4. class three : public one{ public: int a3; public: three(){ cout<<"threen"; }};class four: public two , public three{ private: int a4; public: four(){ a4=6;cout<<"fourn"; }};
5. 5. int main(){ four f;return 0;}OUTPUT:One Two copies copies of one presentTwo in an object of type four.OneThreeFour
6. 6. int main(){ four f; cout<<f.a; //error : request for member ‘a’ is ambiguous return 0;} Ambiguous because variable „a‟ is present twice in the object of four, one in two class and one in three class. Because there are two copies of „a‟ present in object „f‟, the compiler doesn‟t not know which one is being referred.
7. 7. HOW TO RESOLVETwo ways: Manual Selection. Using virtual base class.
8. 8. MANUAL SELECTION Manually select the required variable ‘a’ by the using scope resolution operator. int main() { four f; f.two::a=40; OUTPUT: f.three::a=50; 40 50 cout<<f.two::a<<“n”; cout<<f.three::a<<“n”; return 0; }
9. 9.  f.two::a=40; and f.three::a=50; In the above statements, use of scope resolution operators resolves the problem of ambiguity. But this is not an efficient way because still two copies of „a‟ is available in object „f‟. How to make only one copy of „a‟ available in the object „f‟ which consumes less memory and easy to access without using scope resolution operator. This can be done by using virtual base class.
10. 10. VIRTUAL BASE CLASS class one class two : virtual public one { { public: public: int a; int a2; public: public: one() {cout<<"onen"; } two(){ cout<<"twon"; } }; };class three:virtual public one class four: public two , public three{ { public: private: int a3; int a4; public: public: three(){cout<<"threen"; } four(){ a4=6;cout<<"fourn"; }}; };
11. 11. int main(){ four f; return 0;}OUTPUT:ONE Only one copy is maintained.TWO No ambiguity.THREEFOUR
12. 12. int main(){ four f; f.a=40; // umambigious since only one copy of ‘a’ is present in object ‘f’ cout<<f.a; return 0;} Now that both two and three have inherited base as virtual, any multiple inheritance involving them will cause only one copy of base to be present. Therefore, in FOUR, there is only one copy of base.
13. 13. THANK YOU