1

Тема: Використання інтерфейсів

Вирішив спробувати використати спадкування від інтерфейсу ніж реалізації, чи нормально для цього так використати ідіому "вказівник на реалізацію"? Тобто я хочу в майбутньому звертатись до різноманітних об'єктів поліморфно, а також не хочу писати багато коду в кожному з них. Які є інші підходи?

struct ITransformable
{
      void SetTransform(Transform) = 0;
      Transform GetTranform() = 0;
}

struct Circle : ITransformable
{
      void SetTransform(Transform t) { _impl.SetTransform(t); }
      Transform GetTranform() { return _impl.GetTransform(); }

private:
      Transformable _impl;
}

Причиною використання інтерфейсів є те, що у мене класи мають підтримувати багато різних інтерфейсів і якщо я зроблю один базовий клас, що містить усю цю функціональність, то він буде якимсь вайлуватим.

2

Re: Використання інтерфейсів

Ем...
1. Завдання все ж треба написати сюди. Тобто приблизно зрозуміло, чого ви хочете досягти, але тільки приблизно. А без цього важко взагалі щось казати.
2. Ваш код банально не компілюється, ви крапки з комами та virtual позабували.
3. Ви використовуєте struct як просто синонім class...{public:. Воно насправді так і є, але загальна традиція - для ООП вживати класи, а структури - для неінкапсульованого АТД. Так ви плутаєте читачів.
Ну а в цілому - чому б ні, але див. п. 1.

3

Re: Використання інтерфейсів

Дійсно, щось незрозуміле що треба взагалі...
І чому саме інтерфейси а не класи?

4 Востаннє редагувалося Yola (07.11.2015 10:49:47)

Re: Використання інтерфейсів

Itari написав:

І чому саме інтерфейси а не класи?

Я можу успадкуватись від багатьох інтерфейсів - ITransformable, IDrawable, ... Тоді як множинне спадкування реалізації дуже знеохочується в C++. Я можу уявити собі множинне спадкування хіба від класів, які між собою ПОВНІСТЮ/ЦІЛКОМ/ГЕТЬ-ЧИСТО непов'язані. Наприклад, класи з різних бібліотек.

5

Re: Використання інтерфейсів

Можна будь-яку ідею довести до абсурду. У вас будуть об'єкти, які можна трансформувати, але не можна малювати?

6

Re: Використання інтерфейсів

koala написав:

У вас будуть об'єкти, які можна трансформувати, але не можна малювати?

Не планую таких.

Чому я захотів відмовитись від базового класу Shape, це тому що у мене окрім трикутників, кіл тощо, мають з'явитись об'єкти на кшталт сплайнів. І нові типи об'єктів матимуть багато відмінного функціоналу.

7

Re: Використання інтерфейсів

Ну тоді можна зробити спільний DrawingObject чи якось так. Чи навіть в інтерфейс IDrawable додати цей ваш Transform.