0% found this document useful (0 votes)
147 views3 pages

Virtual Base Class: Class Exforsys (Protected: Int X ) Class Exf1:public Exforsys

Virtual base classes provide a way to optimize class hierarchies that use multiple inheritance by avoiding data member duplication and ambiguities. When a base class is specified as virtual, it can act as an indirect base more than once without duplicating its data members. A single copy of the virtual base class's data members is shared by all derived classes. This saves space compared to non-virtual base classes, where each derived class contains a copy of the base class data members. To declare a virtual base class, the virtual keyword is used in the derived class base lists.

Uploaded by

Zehra Jabeen
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
147 views3 pages

Virtual Base Class: Class Exforsys (Protected: Int X ) Class Exf1:public Exforsys

Virtual base classes provide a way to optimize class hierarchies that use multiple inheritance by avoiding data member duplication and ambiguities. When a base class is specified as virtual, it can act as an indirect base more than once without duplicating its data members. A single copy of the virtual base class's data members is shared by all derived classes. This saves space compared to non-virtual base classes, where each derived class contains a copy of the base class data members. To declare a virtual base class, the virtual keyword is used in the derived class base lists.

Uploaded by

Zehra Jabeen
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as RTF, PDF, TXT or read online on Scribd
You are on page 1/ 3

Virtual Base Classes Because a class can be an indirect base class to a derived class more than once, C++

provides a way to optimize the way such base classes work. Virtual base classes offer a way to save space and avoid ambiguities in class hierarchies that use multiple inheritance. Each nonvirtual object contains a copy of the data members defined in the base class. This duplication wastes space and requires you to specify which copy of the base class members you want whenever you access them. When a base class is specified as a virtual base, it can act as an indirect base more than once without duplication of its data members. A single copy of its data members is shared by all the base classes that use it as a virtual base. When declaring a virtual base class, the virtual keyword appears in the base lists of the derived classes.

Virtual Base Class

In the above example, there are two derived classes Exf1 and Exf2 from the base class Exforsys. As shown in the above diagram, the Training class is derived from both of the derived classes Exf1 and Exf2. In this scenario, if a user has a member function in the class Training where the user wants to access the data or member functions of the class Exforsys it would result in error if it is performed like this:
class Exforsys { protected: int x; }; class Exf1:public Exforsys

{ }; class Exf2:public Exforsys { }; class Training:public Exf1,public Exf2 { public: int example() { return x; } };

The above program results in a compile time error as the member function example() of class Training tries to access member data x of class Exforsys. This results in an error because the derived classes Exf1 and Exf2 (derived from base class Exforsys) create copies of Exforsys called subobjects. This means that each of the subobjects have Exforsys member data and member functions and each have one copy of member data x. When the member function of the class Training tries to access member data x, confusion arises as to which of the two copies it must access since it derived from both derived classes, resulting in a compile time error. When this occurs, Virtual base class is used. Both of the derived classes Exf1 and Exf2 are created as virtual base classes, meaning they should share a common subobject in their base class. For Example:
class Exforsys { protected: int x; ; class Exf1:virtual public Exforsys { }; class Exf2:virtual public Exforsys { }; class Training:public Exf1,public Exf2 { public: int example() { return x; } };

In the above example, both Exf1 and Exf2 are created as Virtual base classes by using the keyword virtual. This enables them to share a common subobject of their base class Exforsys. This results in only one copy that the member function example() of Class Training can access the member data x

You might also like