Имя: Пароль:
IT
 
C++: Перегрузка при множественном наследовании
0 Ненавижу 1С
 
гуру
14.02.12
17:12
допустим упрощенно есть

struct A
{
 virtual void Test()=0;
};

struct B: A
{
 void Test() {/*...*/}
};

struct C //не наследуется ни от чего, важно!
{
 virtual void Test()=0;
};

struct D: B, C
{
 //КАК ПРАВИЛЬНО определить метод от C?
 void C::Test() {/*...*/}
};
1 mirosh
 
14.02.12
17:13
вот за это я и не люблю с++ )
2 Волшебник
 
14.02.12
17:15
(0) Поставь Java или C# и не парься.
3 zak555
 
14.02.12
17:15
зачем структуры использовать ?
4 Ненавижу 1С
 
гуру
14.02.12
17:16
(2) в том и дело, хочу без промежуточной платформо-машины
(3) это пример, но и вообще в плюсах без разницы
5 Волшебник
 
14.02.12
17:21
(4) Без промежуточной не обойдёшься. Слоёв 5-6 будет точно
6 Кириллка
 
14.02.12
17:23
(0)разыменовав явно, ромбовидное наследование же.
7 Ненавижу 1С
 
гуру
14.02.12
17:26
(6) нет его же!
(5) ладно тебе придираться
8 Кириллка
 
14.02.12
17:27
(7)а, у тебя же struct C //не наследуется ни от чего
9 Кириллка
 
14.02.12
17:35
сработает?

void class C::Test() {/*...*/}
10 Ненавижу 1С
 
гуру
15.02.12
08:43
(9) в том и дело, что нет
11 Ненавижу 1С
 
гуру
15.02.12
09:00
Вроде бы порешал разной сигнатурой методов (ввел фиктивный параметр)
12 Stagor
 
15.02.12
12:12
ООП устаревшая технология, где то была статья на (sql.ru) про новую парадигму!
13 Конфигуратор1с
 
15.02.12
12:16
(12)зря ты. Сейчас начнется срач на 3 ветки в 1000 постов
14 Stagor
 
15.02.12
12:22
(13) Может найду ссылку на статью...
15 Кириллка
 
15.02.12
14:40
(10)А че ты хочешь получить-то?
16 Ненавижу 1С
 
гуру
15.02.12
15:29
да уже получил, но расскажу таки, тут шаблоны
есть абстрактный класс Enumerable<T>, от него
1. есть вполне реальный класс List<T>: public Enumerable<T>
2. опять таки абстрактный класс CompositeEnumerable<T>: public Enumerable<T>
3. и от последнего уже опять вполне реальный класс CompositeList<T>: public Enumerable<T>, public List<Enumerable<T> >

то есть CompositeList<T> одновременно является и списком списков и просто списком (в этом случае проход по всем спискам как по одному делается)
17 bahmet
 
15.02.12
15:34
struct [1C++]:,[C++]
{
   virtual void Zdelat_Vse_Zaebato()=0;
}
18 Stagor
 
16.02.12
10:48
(13) Ну, вот на 100 постов даже нет :)
Устал народ от программирования :)
19 Ненавижу 1С
 
гуру
16.02.12
10:50
весны народ хочет
20 Stagor
 
16.02.12
12:41
21 Stagor
 
16.02.12
12:51
комментарий с форума:

К ООП тоже отношусь спокойно, отрицательно.

Так вот, написание кода - это мелочи. Это 5-10% времени и стоимости разработки. Сотни миллиарды долларов и миллионы человеко-лет (без преувеличения), как в трубу, вылетают на поддержание (тестирование, правку багов) софта. Вот это и есть настоящая проблема. Да еще программисты наповадились с места на место бегать каждые 2-4 года, -- только человек освоится и годик поработает продуктивно, -- глядишь, он уже опять куда-то намыливается... И вот тут возникает интересная проблема. В связи с высокой текучестью кадров и большой сложностью реальных проектов читаемость и модифицируемость кода приобретает первостепенное значение!

Чтобы код был читаем и легко модифицируем, крайне желательно, чтобы он был локально понятен. Так, чтобы новый человек, посмотрев на процедуру, смог достаточно быстро понять, что она делает и как. И вот тут, в объектно-ориентированных языках типа Java, С# начинается веселье с конструкторами, деструкторами, виртуальными функциями, наследованием, монстроидальным шаблонным метапрограммированием, полиморфизмом, исключительными ситуациями... Увидев вызов простой функции, как правило сразу понятно что происходит, можно сходить и посмотреть, что она делает. В объектно ориентированных языках, где народ (в особенности вчерашние студенты) любят, ой как любят переоперделять функции, не поймешь, какой из 15 виртуальных методов будет вызван в данном контексте, и читать текст их всех дело утомительное. В результате починка бага занимает в 3-5 раз больше времени.
22 Ненавижу 1С
 
гуру
16.02.12
13:00
(21) однако новые языки (после плюс+плюс): шарп, ява, руби все же стали объектными
23 Rie
 
16.02.12
13:02
(22) Это одно из направлений. Есть Haskell, F# - это другое, не объектно-ориентированное направление. Есть Scala, Nemerle - это "гибридные" языки. И т.д.
24 Ненавижу 1С
 
гуру
16.02.12
13:04
(23) F# тоже поддерживает ООП, а вообще что-то они не менее известны широкой публике
25 Ненавижу 1С
 
гуру
16.02.12
13:04
в шарпе тоже есть и элементы функционального и обобщенного, это не противоречит ООП
26 Rie
 
16.02.12
13:10
(24) Поддерживает - как вспомогательный механизм и для интероперабельности.
Что касается известности - тут ведь дело не в качестве языка. Бренд + наличие инструментальных средств. Ну и "возраст" (в том числе "возраст" эффективной реализации - _компиляторы_ для функциональных языков появились позже, чем для императивных; да и современные функциональные языки начались в 1980-х, то есть, на полтора-два десятка лет позже того же ООП).

(25) "Чистые" языки на практике малопригодны. Любой язык так или иначе реализует несколько парадигм. Но в большинстве языков - имеется основная парадигма + практически удобные довести.
27 Stagor
 
16.02.12
13:11
вот еще с форума:

Например, когда-то одному разработчику был дан проект очень незатейливой игры. Предполагалось, что эта игра займет около месяца разработки. Но месяца не хватило. Спустя шесть недель выяснилась причина. Программист попался очень педантичный и вместо того чтобы взять чистый СИ и написать игру, он 80% времени занимался тусовкой классов в сложнейшей иерархии. Когда посчитали – оказалось порядка 210 классов. Движок получился, была написана чудовищная гора текста. В объекты было завернуто все, начиная от объектов межпоточной синхронизации и кончая экранными виджетами со своей собственной системой сообщений. Да только вот беда — сама игра была в совершенно зачаточном состоянии и не работала.

и ещё, но in english

http://www.softpanorama.org/SE/anti_oo.shtml
28 Rie
 
16.02.12
13:16
(27) Ну, это больше напоминает историю о дураке и стеклянном половом члене, нежели характеризует ООП :-)
29 Ненавижу 1С
 
гуру
16.02.12
13:17
все таки устроили холивар )) льете на вентилятор?
30 zinch
 
16.02.12
13:23
Почему бы не использовать has-a отношение?
31 Ненавижу 1С
 
гуру
16.02.12
13:24
(30) можно, но там и так вложенных объектов много
32 Ненавижу 1С
 
гуру
21.02.12
15:42
оказывается нельзя так писать:

class A{};
class B: protected A{};
A* a1 = new B();

не знал
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.