Интерфейсы и дочерние классы

В C ++ у меня есть класс FooA и класс FooB что оба являются дочерними классами базового класса Foo. FooB должен реализовать interface Бар. Если бы у меня был только указатель Foo на FooB и я хотел бы использовать методы FooB’s Bar, мне пришлось бы делать приведение. Тем не менее, это, кажется, нарушает polymorphism,

Мне интересно, есть ли лучший подход, позволяющий FooB реализовывать интерфейс Bar, не заставляя все производные классы Foo также реализовывать Bar.

2

Решение

Редизайн ваших классов. Скорее всего, наследство не то, что вам нужно здесь.

Обоснование: если у вас есть Foo где-то указатель, то его владельцу не нужно знать, указывает ли он на Foo объект или FooB или любой другой производный объект — он использует только Foo функциональность, неосведомленная о реализации. (Так работает полиморфизм в целом.)

Другими словами: если у вас есть Foo указатель и его пользователь зависят от функциональности только в FooBто указатель должен быть типа FooB на первом месте.

2

Другие решения

Если вы хотите использовать только указатель Foo и вызывать методы Bar, Foo должен реализовать интерфейс Bar. Это единственный способ сообщить вашему компилятору, что объект Foo может использовать этот метод, разумеется, без приведения.

0

По вопросам рекламы [email protected]