Это помогает, если вы знаете основные механизмы. C ++ формализует некоторые методы кодирования, используемые программистами C, заменяемые «классы» с использованием «overlays» - структуры с общими разделами заголовков будут использоваться для обработки объектов разных типов, но с некоторыми общими данными или операциями. Обычно базовая структура наложения (общая часть) имеет указатель на таблицу функций, которая указывает на другой набор подпрограмм для каждого типа объекта. C ++ делает то же самое, но скрывает механизмы, то есть C ++ ptr->func(...)
, где func является виртуальным, поскольку C будет (*ptr->func_table[func_num])(ptr,...)
, где изменения между производными классами являются содержимым func_table. [Не виртуальный метод ptr-> func () просто переводится в mangled_func (ptr, ..).]
. Таким образом, вам нужно только понять базовый класс, чтобы вызвать методы производного класса, т. е. если подпрограмма понимает класс A, вы можете передать ей указатель производного класса B, тогда виртуальные методы, называемые, будут такими, как B, а не A, поскольку вы проходите через таблицу функций B.
Я думаю, что у Дэна Беккера есть правильная идея, но переизбрание abs(C-B)
и abs(C-A)
означает, что сравниваются обновленные матрицы, а не оригинальные .
Я не думаю, что это то, что вы хотите, так что это исправленная версия его метода:
CmA = abs(C-A);
CmB = abs(C-B);
ind = Cma < CmB; C(ind) = A(ind);
ind = CmA > CmB; C(ind) = B(ind);
C(CmA == CmB) = 0;
Я думаю, что вы хотите следующее:
ind = abs(C - A) < abs(C - B) ; C(ind) = A(ind);
ind = abs(C - A) > abs(C - B) ; C(ind) = B(ind);
ind = abs(C - A) == abs(C - B) ; C(ind) = 0;