- virtual . ,
ZooAnimal Bear Raccoon.
//
placement order of keywords public
// and virtual is not significant
class
Bear : public virtual ZooAnimal { /* ... */ }
class Raccoon : virtual public
ZooAnimal { /* ... */ }
, -
,
. ,
ZooAnimal,
. ZooAnimal, ,
: ,
AT&T 2.0 ++ . ,
, ,
. -
.
class ZooAnimal { // simplified
definition
public:
ZooAnimal() { zooArea = 0; name = 0;
}
ZooAnimal( char*, short );
void locate();
protected:
short
zooArea;
char *name; };
Bear Raccoon.
:
Bear::Bear( char *nm ): ZooAnimal( nm, BEAR ) { ...
}
Raccoon::Raccoon( char *nm )
: ZooAnimal( nm, RACCOON ) { ...
}
Panda
:
class Panda : public Bear, public Raccoon { ... };
Bear, Raccoon ZooAnimal ,
Panda ZooAnimal.
.
, ZooAnimal Panda
ZooAnimal .
. . Panda
ZooAnimal, Raccoon Bear. Raccoon Bear, ,
ZooAnimal. Panda
. ,
. , Raccoon Bear, Panda
ZooAnimal. Panda ZooAnimal
. Panda
ZooAnimal,
ZooAnimal. ZooAnimal
Panda Raccoon Bear.
Panda
:
Panda::Panda( char *nm ): ZooAnimal( nm, PANDA ),Bear(
nm ), Raccoon( nm ) { ... }
Panda::Panda( char *nm ): Bear( nm ), Raccoon( nm
) { ... }
ZooAnimal.
Raccoon Bear
ZooAnimal,
.
;
,
.
( 7.4 ).
Bear, , ZooAnimal Bear .
,
.
. Bear, Raccoon Panda
8.3. public
private, :
-
public - public protected -
.
- private
private .
,
- , Panda, public
private ? ,
class
ZooAnimal
{public:
void locate();
protected:
short
zooArea;
};
class Bear :
public virtual ZooAnimal { /* ... */
};
class Raccoon :
private virtual ZooAnimal { /* ... */ };
class Panda
:
public Bear, public Raccoon { /* ... */ };
class Raccoon : public
virtual ZooAnimal
class Bear : public virtual ZooAnimal
8.3
Panda
zooArea locate(), ZooAnimal .
Panda ? public Panda
ZooAnimal. , Panda
private .
? ?
Panda p;p.locate();
,
. public . Panda
zooArea locate(). ,
, public
,
public.
ZooAnimal locate(), Raccoon
.
Bear b;
b.locate(); // Bear
instance
Bear, a ZooAnimal.
Panda p;
p.locate(); // which locate? e
, Panda locate().
ZooAnimal Raccoon Bear,
locate() Bear. .
.
locate() Bear, ZooAnimal, Raccoon.