Имя пользователя:
Пароль:
 

Название темы: C++ vs Delphi
Показать сообщение отдельно

Старожил


Сообщения: 163
Благодарности: 0

Профиль | Отправить PM | Цитировать


ivank
Цитата:
Какие затраты, в смысле на что?
Проблема неоднозначности
Например: оба родителя используют метод add(int)
И предположим, что получившийся класс использует оба метода и ему они нужны для разных целей. После некоторго размышления оставляем оба метода например так
void CC::add(int n)
{
* *CA::add(n);
}
И вводим второй метод
void CC::add2(int n)
{
* CB::add(n);
}
Ура, проблема решена

А если двусмысленность более сложна?
Сейчас это было необходимо из-за пересечения понятий наследования и параметрической перегрузки. Когда в С++ используется перегруженное имя, то сперва вызывается механизм наследования для поиска контекста, в котором определена функция. Затем типы параметров анализируются для снятия двусмысленности в пределах данного контекста. Предположим, что есть два класса А и В, для каждого из которых определен метод display. но у методов разные аргументы (int и double). Мы считаем, что так как эти два метода различаются по списку параметров, дочерний класс может наследовать от двух родителей и иметь доступ к обоим методам. Счазззз. Когда мы вызываем метод display с целочисленным аргументом, компилятор не может приянять решение, использовать ли функцию из класса A(которая соответствует типу аргумента) или же из класса В (которая встречается первой при заложенном в С++ алгоритме поиска; для ее вызова аргумент будет приведен от типа int к типу double). Копмилятор ругнется, но ругнется только в точке вызова метода, а не при описании класса.
Звучит может угрожающе, но на самом деле это лечится, но только переопределением родительских классов, где методы необходимо объявить виртуальными (не чисто виртуальными), и компилятору станет ясно, что мы сделали это специально
Проблема на уровне дочерних классов, а решение на уровне родительских. Кде тут ООП?
Вот эти вот расходы на переопределение больших классов и кажутся мне слишком большими.

[s]Исправлено: Crew, 0:15 12-02-2003[/s]

-------
"Сколь бы сложной ни казалась проблема на первый взгляд, она, если правильно к ней подойти, окажется еще более сложной" - Пол Андерсон


Отправлено: 00:13, 12-02-2003 | #60

Название темы: C++ vs Delphi