;
class A {};
class B: public A, public A {};
error C2500: 'B': 'A' is already a direct base clas
, , :
Class Base
{
Int m_x;
public:
virtual void f () { }
int getX () const { return m_x; }
};
Class Middle1
: public Base
{
Int m_y;
public:
virtual void g () { }
};
Class Middle2
: public Base
{
Int m_z;
public:
virtual void h () { }
};
Class Derived
: public Middle1, public Middle2
{
Int a;
public:
void f () override { }
void g () override { }
void h () override { }
};
, Derived Base - . :
, :
Derived + . .., Base. , Base, + vptr. f Derived, Base, Middle1 , MIddle2 - 12 -thunk.
, :
Derived d;
Base * b = & d;
error C2594: 'initializing': ambiguous conversions from 'Derived *' to 'Base *'
, Base Derived , . :
Derived d;
Middle1 * m1 = & d;
Base * b = m1;
:
Derived d;
Middle1 * m2 = & d;
Base * b = m2;
, Middle1 . Base Derived , 100% .
:
Derived d;
D.getX();
:
Derived d;
d.Middle1::getX();
using:
Class Derived
|
|
: public Middle1, public Middle2
{
...
public:
...
using Middle1::getX;
};
, Base - :
Base::Base
Middle1::Middle1
Base::Base ( this Middle2)
Middle2::Middle2
Derived::Derived
:
Derived::~Derived
Middle2::~Middle2
Base::~Base ( this Middle2)
Middle1::~Middle1
Base::~Base
38. . , , . .
. (.. , ) , . , , , , . .., , , Printer, Printer, PoweredDevice Copier, , Copier - Printer.
2 , - Microsoft, - GCC. Microsoft.
, Printer. 24 (VisualStudio 2010, 32- , ). ? :
● m_nominalPower (4 );
● m_turned (1 );
● m_pagesPerMinute (4 ).
, 9 , 24. 15 ?
-, ( = 4 ), m_turned 1 , 4. 12 .