Самое важное правило ООП на C++ таково: открытое наследование означает «является». Запомните это. Скотт Майерс