Формулировка вашего вопроса немного забавна, когда вы читаете его как модель реального мира (модель домена ).
В реальном мире домашнее животное не связано с животным. Скорее, домашнее животное IS животное. Следовательно, класс pets
является (ролевым) подклассом animals
в доменной модели, основанной на значении термина «домашнее животное» в английском языке.
Концепция классов ролей не очень хорошо поддерживается основными языками ООП. Объект может играть много ролей (то есть создавать экземпляры множества классов ролей) одновременно (множественная классификация), и он может перестать играть роль, то есть перестать создавать экземпляр соответствующего класса ролей (динамическая классификация).
Может быть, вы не заинтересованы в том, чтобы сначала создать модель предметной области, прежде чем создавать (1019) * модель проектирования (независимую от технологии), которую затем можно превратить, например, в модель класса Java или C #.
Может быть, вы хотите перейти к модели класса C ++ напрямую, не пытаясь сначала понять основные понятия предметной области.
Вы можете сделать это, но я не думаю, что это хорошая идея.