Виртуальное + множественное наследование?
От: о_О
Дата: 25.11.11 09:40
Оценка:
Как часто применяется? Что плохого в таком подходе? Какие есть альтернативы?

interface IDeveloper
{
  virtual ~IDeveloper() { }

  virtual size_t GetAge() = 0;
};

interface ISeniorDeveloper : virtual public IDeveloper
{
  virtual size_t GetInferiorCount() = 0;
};

interface IProjectManager : virtual public ISeniorDeveloper
{
  virtual size_t GetTeamCount() = 0;
};

/**********************************************************************************************/

class Developer : virtual public IDeveloper
{
public:
  size_t GetAge();
};

class SeniorDeveloper : virtual public ISeniorDeveloper, public Developer
{
public:
  size_t GetInferiorCount();
};

class ProjectManager : virtual public IProjectManager, public SeniorDeveloper
{
public:
  size_t GetTeamCount();
};
Re: Наследование от конкретного класса опасно в C++
От: igna Россия  
Дата: 25.11.11 10:41
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>Как часто применяется? Что плохого в таком подходе? Какие есть альтернативы?


Если по-английски читаешь, то вот буквально то, что ты спросил: Inheritance — multiple and virtual inheritance

о_О>class SeniorDeveloper : virtual public ISeniorDeveloper, public Developer
о_О>{
о_О>public:
о_О>  size_t GetInferiorCount();
о_О>};


Тут ты разрешаешь присваивание объекта класса SeniorDeveloper объекту класса Developer, при этом происходит slicing.
Re[2]: Наследование от конкретного класса опасно в C++
От: о_О
Дата: 25.11.11 11:36
Оценка:
Здравствуйте, igna, Вы писали:

I>Тут ты разрешаешь присваивание объекта класса SeniorDeveloper объекту класса Developer, при этом происходит slicing.


но я же не сделал описания что это такое

у меня два слоя: интерфейс и реализация. конкретно это — интерфейс слоя реализации. его видит только реализация слоя интерфейса (пользователь вообще ничего не видит (никаких IDeveloper, ISeniorDeveloper)), и в ней есть только IDeveloper, ISeniorDeveloper. а вот реализация слоя реализации знает как что и срезку допускать не будет (ответственность лежит на том, кто делает реализацию слоя реализации)
Re: Виртуальное + множественное наследование?
От: Sashaka Россия  
Дата: 25.11.11 11:50
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>Как часто применяется? Что плохого в таком подходе? Какие есть альтернативы?


И то и другое — зло.
Re[2]: Виртуальное + множественное наследование?
От: uzhas Ниоткуда  
Дата: 25.11.11 12:00
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>И то и другое — зло.

дрючить brainbench с временными емейлами тоже зло
Re[2]: Виртуальное + множественное наследование?
От: о_О
Дата: 25.11.11 12:06
Оценка:
Здравствуйте, Sashaka, Вы писали:

S>Здравствуйте, о_О, Вы писали:


о_О>>Как часто применяется? Что плохого в таком подходе? Какие есть альтернативы?


S>И то и другое — зло.


parashift C++ FAQ

[25.2] I've been told that I should never use multiple inheritance. Is that right?

Grrrrrrrrr.

It really bothers me when people think they know what's best for your problem even though they've never seen your problem!! How can anybody possibly know that multiple inheritance won't help you accomplish your goals without knowing your goals?!?!?!?!!!

Next time somebody tells you that you should never use multiple inheritance, look them straight in the eye and say, "One size does not fit all." If they respond with something about their bad experience on their project, look them in the eye and repeat, slower this time, "One size does not fit all."

People who spout off one-size-fits-all rules presume to make your design decisions without knowing your requirements. They don't know where you're going but know how you should get there.

Don't trust an answer from someone who doesn't know the question.

Re: Виртуальное + множественное наследование?
От: MasterZiv СССР  
Дата: 25.11.11 13:00
Оценка: 5 (1)
On 11/25/2011 01:40 PM, о О wrote:

> Как часто применяется?


Смотря как и что программируешь. Считается, что нечасто.
Я лично достаточно часто использую.

Что плохого в таком подходе?

Ничего, кроме большей сложности подхода.

Какие есть альтернативы?

Агрегация дополнительных классов. Но это менее удобно.
И нарушается правило подстановки -- класс не является
подтипом побочного суперкласса.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Виртуальное + множественное наследование?
От: B0FEE664  
Дата: 25.11.11 13:02
Оценка:
Здравствуйте, Sashaka, Вы писали:

о_О>>Как часто применяется? Что плохого в таком подходе? Какие есть альтернативы?

S>И то и другое — зло.

В той области, где вы работаете — может быть. Но не надо говорить за всех.
И каждый день — без права на ошибку...
Re[3]: Наследование от конкретного класса опасно в C++
От: igna Россия  
Дата: 25.11.11 14:03
Оценка:
Здравствуйте, о_О, Вы писали:

о_О>у меня два слоя: интерфейс и реализация. конкретно это — интерфейс слоя реализации. его видит только реализация слоя интерфейса (пользователь вообще ничего не видит (никаких IDeveloper, ISeniorDeveloper)), и в ней есть только IDeveloper, ISeniorDeveloper. а вот реализация слоя реализации знает как что и срезку допускать не будет (ответственность лежит на том, кто делает реализацию слоя реализации)


А слоя интерфейса реализации слоя реализации слоеного интефейса у тебя нет?
Re[4]: Наследование от конкретного класса опасно в C++
От: о_О
Дата: 25.11.11 14:20
Оценка:
Здравствуйте, igna, Вы писали:

I>Здравствуйте, о_О, Вы писали:


о_О>>у меня два слоя: интерфейс и реализация. конкретно это — интерфейс слоя реализации. его видит только реализация слоя интерфейса (пользователь вообще ничего не видит (никаких IDeveloper, ISeniorDeveloper)), и в ней есть только IDeveloper, ISeniorDeveloper. а вот реализация слоя реализации знает как что и срезку допускать не будет (ответственность лежит на том, кто делает реализацию слоя реализации)


I>А слоя интерфейса реализации слоя реализации слоеного интефейса у тебя нет?


нет. делегирую операции прокси-объекту всего-навсего
Re: Виртуальное + множественное наследование?
От: Sir-G  
Дата: 25.11.11 15:16
Оценка: 5 (1)
Здравствуйте, о_О, Вы писали:

о_О>Какие есть альтернативы?

Не наследовать интерфейсы, и не надо никаких виртуальных наследований. =) Так в COM делают (там наследоваться виртуально можно только от IUknown).
Re[2]: Виртуальное + множественное наследование?
От: о_О
Дата: 25.11.11 15:21
Оценка:
Здравствуйте, Sir-G, Вы писали:

SG>Здравствуйте, о_О, Вы писали:


о_О>>Какие есть альтернативы?

SG>Не наследовать интерфейсы, и не надо никаких виртуальных наследований. =) Так в COM делают (там наследоваться виртуально можно только от IUknown).

кстати хороший вариант, уже думал над этим
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.