.


:




:

































 

 

 

 


. , ,




 

;

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 .





:


: 2016-07-29; !; : 414 |


:

:

,
==> ...

1343 - | 1310 -


© 2015-2024 lektsii.org - -

: 0.016 .