Lecture
A class can have several immediate base classes.
class A1 {. . .};
class A2 {. . .};
class A3 {. . .};
class B: public A1, public A2, public A3 {. . .};
Such inheritance is called plural . With multiple inheritance, no class can be used more than once as a direct base. However, a class may be more than once an indirect base class.
class X {. . . f (); . . .};
class Y: public X {. . .};
class Z: public X {. . .};
class A: public Y, public Z {. . .};
We have the following hierarchy of classes (and objects):Such a duplication of a class corresponds to the inclusion in the derived object of several objects of the base class. In this example, there are two objects of class X. To eliminate possible ambiguities, you need to contact a specific component of class X using the full qualification
Y:: X:: f () or Z:: X:: f)
Example.
Now class A will include only one instance of X, access to which classes Y and Z have equal rights.
Example 2.7.1
Here
· The base class object occupies 13 bytes in memory:
2 bytes - int field;
1 byte - char field;
10 bytes - field char [10].
· An object of class abase occupies 23 bytes in memory:
8 bytes - field double;
13 bytes - base base class fields;
2 bytes - for communication in the hierarchy of virtual classes;
· An object of class bbase occupies 19 bytes in memory:
4 bytes - field float;
13 bytes - base base class fields;
2 bytes for communication in the hierarchy of virtual classes;
· An object of class top occupies 33 bytes in memory:
4 bytes long field;
10 bytes - data and communications abase;
6 byte data and bbase communications;
13 bytes - fields of base class base.
If during base inheritance in the abase and bbase classes the base class is made non-virtual, the results will be as follows:
an object of class base takes up 13 bytes in memory;
an object of class abase occupies 21 bytes in memory (there are no 2 bytes for communication);
bbase class object occupies 17 bytes in memory (there are no 2 bytes for communication);
a top object occupies 42 bytes in memory (the base object enters twice).
Comments
To leave a comment
C ++ (C plus plus)
Terms: C ++ (C plus plus)