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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
togramago
9 / 9 / 0
Регистрация: 03.11.2009
Сообщений: 39
#1

typeid && dynamic_cast - C++

25.01.2010, 02:34. Просмотров 2064. Ответов 4
Метки нет (Все метки)

Здравствуйте!

а можно ли вот так написать?
C++
1
2
3
4
5
6
bool Item::operator==(Ware * w) const
{
    if (typeid(*w) == typeid(*this))
                return (*this == (*dynamic_cast<Item*> (w)));
            return false;
        }
где Item - класс насследник Ware

у меня компилятор ругаетсчя на
C++
1
return (*this == (*dynamic_cast<Item*> (w)));
(говорит что константность нарушается)
и нехочет красиво форматировать (понимаю что звучит диковато, но наверняка где-то зарыта собака)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2010, 02:34     typeid && dynamic_cast
Посмотрите здесь:

dynamic_cast<X&>(Y) что в результате? - C++
Попытка привести указатель на один класс к указателю на другой (несовместимый) в результате получим NULL class X{ }; class Y{ }; ...

Ошибка: "i" не был объявлен в этой области - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;time.h&gt; using namespace std; int main() { int n; srand(time(NULL)); ...

Undefined reference to 'My_lab2::serialize_child(My_lab2::My_stack&,boost::interpro cess::file_lock&)') - C++
Компилирую test: g++ test.cpp -L. -lwrk -lboost_serialization -o programwrk -std=c++0x Так же компилирую libwrk до компиляции...

функции && строки - C++
ребята,пожалуйста,помогите.В понедельник практику сдавать,а эти задачи НЕМОГУ. 1. Написать процедуру для суммирования матриц. С ее...

Что значат && и || - C++
Вроде бы результат кода один и тот же первый код #include &lt;stdio.h&gt; #define MAX_STRING_SIZE 20 int main() { FILE *pFile;...

Move конструктор && - C++
Никак не могу понять, что же он делает. Вроде как пишут, что он даже предпочтительнее, чем всякие const MyType&amp; var в качестве параметров в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2010, 03:24     typeid && dynamic_cast #2
togramago, чего-то Вы тут намудрили.
Обычно операторы сравнения принимают константную ссылку на объект аналогичного класса.
Почему у Вас данный оператор принимает указатель?
Для чего это сделано?
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
25.01.2010, 09:52     typeid && dynamic_cast #3
CyBOSSeR, см.здесь
Сравнение наследников
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
25.01.2010, 15:41     typeid && dynamic_cast #4
zim22, дело в другом.

Просто, если бы я увидел запись вида:
C++
1
2
3
4
SomeClass sc1;
SomeClass sc2;
 
bool equal = sc1 == &sc2; // получается, что мы сравниваем экземпляр объекта с указателем
у меня бы появились сильные сомнения в здравомыслии человека, который это написал, ибо сравнивать экземпляр класса с указателем на данный класс, это как минимум весьма необычная операция.

Если уж так нужна операция сравнения (с использованием указателей) - лучше использовать внешний дружественный оператор сравнения:
C++
1
bool operator==(const SomeClass* left, const SomeClass* right);
Можно будет добавлять/удалять их по необходимости, не трогая реализацию самих классов.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2010, 16:05     typeid && dynamic_cast
Еще ссылки по теме:

class && constructor - C++
День добрый! Создаю кое-что для кое-чего, но внезапно столкнулся с такой проблемой... Прототип моего класса имеет вид: ... public: ...

функторы && STL - C++
Знакомлюсь с функторами. Помогите реализовать поиск минимального числа в последовательности, средн.арифмет. в посл-ти и количество...

C++ 11 конструктор переноса && - C++
Кто-нибудь может мне пояснить или дать ссылку на информацию о rvalue reference на русском языке, а то на английском что-то не всё могу...

С && C++ - это плохо? - C++
Большинство программистов говорят о том что С# и C++ мешать в одном коде не хорошо. Но что в этом такого плохого?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
25.01.2010, 16:05     typeid && dynamic_cast #5
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Если уж так нужна операция сравнения (с использованием указателей) - лучше использовать внешний дружественный оператор сравнения:
думаю обсуждение лучше вести в другой теме, ссылку на которую я дал постом выше.
внешний дружественный оператор сравнения не прокатывает - придётся много if/ese/dynamic_cast писать. я реализовал сравнение двух объектов через их указатели с помощью двойной диспетчеризации. более элегантного способа не придумал.
Yandex
Объявления
25.01.2010, 16:05     typeid && dynamic_cast
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru