|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.11.2012, 01:17 | #1 |
Пользователь
Регистрация: 15.04.2012
Сообщений: 20
|
Проблема с приведением типа базового класса к типу дочернего
Всем привет. Скорее всего, из названия темы ничего непонятно, поэтому попробую объяснить.
Во-первых, я хочу создать 2 класса - класс матрицы и класс вектора, который будет унаследован от класса матриц. Ну и конечно, нужно перегрузить все математические операторы. Вот некоторые методы: Код:
Код:
Проблема вот в чем: Пытаюсь перегрузить оператор вычитания для вектора: Код:
То есть получается, он не может преобразовать тип Matrix в Vector. Повторюсь, для матриц этот оператор работает прекрасно и возвращает Matrix Подскажите, как правильно написать? Не хотелось бы для класса Vector опять перегружать все операторы, тогда уж и смысл наследования пропадает. Если нужно что-нибудь уточнить по коду - спрашивайте . Спасибо. Последний раз редактировалось sectors70; 16.11.2012 в 02:22. |
16.11.2012, 02:42 | #2 |
Пользователь
Регистрация: 15.04.2012
Сообщений: 20
|
как-то, окольными путями и костылями получилось сделать такую вещь:
Код:
Причем такая конструкция не работала: return static_cast<Vector&>( (Matrix)*this - (Matrix)v ); Честно признаться, я не понимаю, что тут происходит. Помогите разобраться, пожалуйста Последний раз редактировалось sectors70; 16.11.2012 в 02:45. |
16.11.2012, 08:24 | #3 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Проблема в том, что вычитание матриц у Вас порождает матрицу. Разумеется, не любая матрица является "вектором" (в смысле - матрицей nx1), вот компилятор и теряется. Как вариант - определите в классе матриц Matrix :: operator(Vector)(void)const; - тогда компилятор будет просто его вызывать, и всем будет хорошо.
Последний раз редактировалось Abstraction; 16.11.2012 в 08:24. Причина: Смайлики ;( |
16.11.2012, 10:06 | #4 |
Форумчанин
Регистрация: 24.04.2012
Сообщений: 300
|
Ну вообще для этого есть dynamic_cast, но он работает только с указателями и с полиморфными классами.
Т.о тебе в классе Matrix нужно объявить любой виртуальный метод, например: Код:
Код:
Помог? Оставляем отзыв =)
Последний раз редактировалось Helloween; 16.11.2012 в 10:10. |
16.11.2012, 10:22 | #5 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Helloween, вернёт NULL. Ибо Matrix :: operator- возвращает объект, не являющийся объектом класса Vector.
|
17.11.2012, 23:53 | #6 | |
Пользователь
Регистрация: 15.04.2012
Сообщений: 20
|
Цитата:
|
|
17.11.2012, 23:56 | #7 | |
Пользователь
Регистрация: 15.04.2012
Сообщений: 20
|
Цитата:
|
|
18.11.2012, 00:59 | #8 | |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Цитата:
Код:
Код:
|
|
18.11.2012, 01:15 | #9 |
Пользователь
Регистрация: 15.04.2012
Сообщений: 20
|
Спасибо, я понял. Просто я сразу не догадался, что это переопределение оператора приведения типа.
|
18.11.2012, 18:36 | #10 |
Пользователь
Регистрация: 15.04.2012
Сообщений: 20
|
Блин, новая проблема.
Я объявляю в классе Matrix поле Vector v(); Перед этим конечно пишу декларацию класса Vector перед определением Matrix. Дальше в классе Matrix пишу оператор приведения типа: Код:
Скажите, как это обойти? Я читал, что надо объявлять указатель на еще неопределенный класс и все будет нормально, но я не могу понять как тогда переопределить оператор приведения типа, в интернете примеров найти не удалось. |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
C++ проблема с конструктором базового класса | halcyon | Помощь студентам | 7 | 09.05.2012 10:05 |
Создание базового класса | ScrappyCoco | Общие вопросы C/C++ | 3 | 24.04.2012 15:51 |
Функция базового класса вызывает критическую ошибку при вызове для класса-потомка | Archet | Общие вопросы C/C++ | 7 | 17.01.2012 20:17 |
Как обратиться к полям базового класса? | Azartov | Общие вопросы C/C++ | 13 | 03.07.2011 20:32 |
Ошибка при присвоении объекту производного класса объекта базового класса с исп. явного приведения типов | Lanx | Помощь студентам | 0 | 06.04.2011 20:24 |