В C ++ у меня есть класс FooA и класс FooB что оба являются дочерними классами базового класса Foo. FooB должен реализовать interface
Бар. Если бы у меня был только указатель Foo на FooB и я хотел бы использовать методы FooB’s Bar, мне пришлось бы делать приведение. Тем не менее, это, кажется, нарушает polymorphism
,
Мне интересно, есть ли лучший подход, позволяющий FooB реализовывать интерфейс Bar, не заставляя все производные классы Foo также реализовывать Bar.
Редизайн ваших классов. Скорее всего, наследство не то, что вам нужно здесь.
Обоснование: если у вас есть Foo
где-то указатель, то его владельцу не нужно знать, указывает ли он на Foo
объект или FooB
или любой другой производный объект — он использует только Foo
функциональность, неосведомленная о реализации. (Так работает полиморфизм в целом.)
Другими словами: если у вас есть Foo
указатель и его пользователь зависят от функциональности только в FooB
то указатель должен быть типа FooB
на первом месте.
Если вы хотите использовать только указатель Foo и вызывать методы Bar, Foo должен реализовать интерфейс Bar. Это единственный способ сообщить вашему компилятору, что объект Foo может использовать этот метод, разумеется, без приведения.