>>333
ホントだ。

だけど、
Animal *pappy = new Animal(Animal.AnimalType.DOG);
がダメなのが許せない。

だってさ、Animalクラスの中で「AnimalType」っていう名前でenumを定義したんだよ?
何故に
Animal::DOG
で呼び出せちゃうわけ??

つまり、Animalクラス内にAnimalTypeとは別のenum、
public: enum AnimalMoveType { WAIT, MOVE, WALK }
があったとして、

Animal::WAIT
で呼び出せちゃうとAnimalTypeとAnimalMoveTypeはまるで同じenum内にあるみたいじゃん。
これは正直どうなの!?

javaなら
new Animal(Animal.AnimalType.DOG);
で安全に呼び出せるんだけど。