Форум программистов, компьютерный форум CyberForum.ru

Виртуальные функции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Попадает ли точка А в область отрицательных значений X? BORLAND_ TURBO C++ PROFESSIONAL 2006 http://www.cyberforum.ru/cpp-beginners/thread723585.html
Составить блок-схему алгоритма. Написать и отладить программу раразвлетвляющего процесса с использованием алгоритма IF. Ввод координат точки осуществить с экрана; в качестве заголовка окна вводда свою фамилию; определить, попадает ли точка в заданную область, вывести на экран координаты точки и ответ о местоположении точки. Добавлено через 43 секунды Помогите пожалуйста, спасибо!
C++ Сделать конвертер из футов и дюймов в целые метры миллиметры и сантиметры(1 фут = 12 дюймам, 1 дюйм=25.4 мм)заранее благодарен Сделать конвертер из футов и дюймов в целые метры миллиметры и сантиметры(1 фут = 12 дюймам, 1 дюйм=25.4 мм)заранее благодарен. http://www.cyberforum.ru/cpp-beginners/thread723581.html
C++ Сформировать матрицу размером MxN и найти наибольшее среди средних арифметических элементов ее строк.
Сформировать матрицу размером MxN и найти наибольшее среди средних арифметических элементов ее строк. Очень нужна ваша помощь. Заранее спасибо.
C++ Найти максимальный и минимальный элемент матрицы
Дано натуральное число N. Сформировать произвольную матрицу размерностью NxN. Найти минимальный из элементов, расположенных под главной диагональю, и максимальный из элементов, расположенных над главной диагональю.
C++ Найти все натуральные числа, не превосходящие заданного п, которые делятся на каждую из своих цифр. http://www.cyberforum.ru/cpp-beginners/thread723528.html
Найти все натуральные числа, не превосходящие заданного п, которые делятся на каждую из своих цифр.
C++ Количество елементов у массиве Можно ли каким-то образом указать количество елементов массива через параметр?? int Array , где n - параметр. подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
08.12.2012, 20:13     Виртуальные функции
Цитата Сообщение от Schizorb Посмотреть сообщение
Мда... заморочки еще те. Грубо говоря, мне всего навсего нужно создать операцию сложения в базовом и производном классах, чтобы она была виртуальной.
Это называется множественная диспетчеризация. Потому что вы хотите вызывать метод, зависящий от runtime-типов двух аргументов. Ведь когда есть такое:
C++
1
2
3
class Number { /* ... */ };
class Integer : public Number { /* ... */ };
class Ratinal : public Number { /* ... */ };
и пишется такое:
C++
1
2
Number *a = new Rational(2, 3), *b = new Integer(5);
Number *c = *a + *b; // *c == Rational(17, 3)
То operator+ зависит как от типа a, так и от типа b.

Для Си++, в общем, есть три метода реализации такого поведения:
  • много dynamic_cast;
  • сделать свою двухмерную таблицу виртуальных функций с го и гейшами;
  • double dispatch (aka паттерн visitor).
Примеры в той же вики можете глянуть. (Пыщь, пыщь, пыщь.) Да, это сложно, муторно, тормозит и требует вагон boilerplate-кода, но за удобства надо платить.

Цитата Сообщение от Schizorb Посмотреть сообщение
Если возвращать указатель, то это какая-то ерунда. К тому же потом память очищать на стороне вызывающей функции.
А придётся. Вот в частности хотелки такого рода и дали жизнь всяким смарт-поинтерам.
 
Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru