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

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

Войти
Регистрация
Восстановить пароль
 
IloveOOP
0 / 0 / 0
Регистрация: 23.10.2013
Сообщений: 19
#1

STL и полиморфизм - C++

23.10.2013, 22:32. Просмотров 377. Ответов 6
Метки нет (Все метки)

Доброго времени суток!
Исходная информация: класс а-базовый,b-производный у этих ребят определён виртуальный метод(для класса "a" возрачает-1,для "b"-2);
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class a
{
public: 
    virtual int To()
    {
        return 1;
    }
};
 
class b : public a
{   
public: 
    virtual int To()
    {
        return 2;
    }
 
};
беда в том,что я решил хранить их в контейнере...

C++
1
2
3
4
5
6
 list<a*> myList;
    myList.push_back(new a());
    myList.push_back(new b());
 
    list<a*>::iterator I=myList.begin();
    cout<<(*I)->To()<<'\t'<<(*(++I))->To()<<'\n';
парадокс в том,что оба раза вызывается метод производного класса(т.е. вывод: "2 2")...Будьте добры,объясните причину,т.к. препод которому я делаю лабу(это не лаба,а иллюстрация проблемы) не любит ооп, послал меня и сделал -10 к моей самооценки,на вас,господа,надежда
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 22:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос STL и полиморфизм (C++):

stl и полиморфизм - C++
Всем доброго времени суток, возник такой вопрос не знаю как реализовать, имеется 4 класса. Базовый Object он имеет поля x и y от него...

Полиморфизм - C++
Я хотел реализовать множество, используя множественное наследование, но когда написал template &lt;class T&gt; class set { protected: ...

Полиморфизм - C++
Хай :senor: class MyPrint//производный класс { public: MyPrint() { cout &lt;&lt; &quot;Constructor MyPrint&quot; &lt;&lt; endl; } virtual...

Полиморфизм - C++
В одной дешевой книжке про него пишут а в другой дорогой нет и понять я почему то немогу точно как и для чего он нужен

Полиморфизм - C++
Всем доброго времени суток.Сразу к делу. Если описывать с помощью полиморфизма подклассы и потом динамично их создавать ,то можно вызывать...

Полиморфизм - C++
не могу разобраться с полиморфизмом((( Вот как мне вычислить трапеции. У нее ведь три параметра, а не два как у прямоугольника???? ...

6
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
23.10.2013, 22:43 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от IloveOOP Посмотреть сообщение
C++
1
cout<<(*I)->To()<<'\t'<<(*(++I))->To()<<'\n';
беда в том что порядок вычисления аргументов стандартом не определен, если ты напищешь
f() + g()
то компилятор имеет право сначало вызвать ф-ю g, а затем f.
аналогично у тебя в коде, твой компилятор сначала инкрементирует итератор, а затем выводит, но к моменту вывода итератор уже изменен.
выведи лист циклом
C++
1
2
for (list<a*>::iterator it = myList.begin(); it != myList.end(); ++it)
        cout << (*it)->To() << endl;
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
23.10.2013, 23:06 #3
Да, l-value до и после инкрементирования в коде не разделённом точками следования.
C++
1
2
cout<<(*I)->To()<<endl;//1 ok
cout<<(*(++I))->To()<<endl;//2 ok
1
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,292
Завершенные тесты: 1
24.10.2013, 00:33 #4
Цитата Сообщение от IGPIGP Посмотреть сообщение
l-value до и после инкрементирования в коде не разделённом точками следования
Понятия 'sequence points' в стандарте уже нет.
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6503 / 3139 / 307
Регистрация: 04.12.2011
Сообщений: 8,661
Записей в блоге: 5
24.10.2013, 00:41 #5
Цитата Сообщение от ct0r Посмотреть сообщение
Понятия 'sequence points' в стандарте уже нет.
Как же теперь правильно сказать?
Как я понимаю, граница простого оператора это ;
и в случае, если в пределах одного оператора (или выражения) используется var и ++var, то поведение не определено.
1
ct0r
Игогошка!
1776 / 678 / 42
Регистрация: 19.08.2012
Сообщений: 1,292
Завершенные тесты: 1
24.10.2013, 01:00 #6
Цитата Сообщение от IGPIGP Посмотреть сообщение
Как же теперь правильно сказать?
Из-за введения новой модели памяти в C++11 появились понятия sequenced before и unsequenced. Они применяются например тут.
The value computations of the operands of an operator are sequenced before the value computation of the result of the operator. If a side effect on a scalar object is unsequenced relative to either another side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined
2
MrGluck
Модератор
Эксперт CЭксперт С++
7419 / 4534 / 673
Регистрация: 29.11.2010
Сообщений: 12,305
24.10.2013, 02:16 #7
Тот же UB, только в профиль.
Суть в том, что компилятор имеет право высчитывать в одном операторе операнды как ему хочется, а не как мы можем ожидать.
Цитата Сообщение от IloveOOP Посмотреть сообщение
беда в том,что я решил хранить их в контейнере...
вы используете коллекцию. Кстати, память надо бы в ней освободить, занятую переменными, на которую ссылаются указатели-элементы.
1
24.10.2013, 02:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 02:16
Привет! Вот еще темы с ответами:

Полиморфизм - C++
Прочитал в Википедии что такое полиморфизм: Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». ...

полиморфизм=( - C++
Ув.Знатаки Доброго времени суток!Вот есть проблемка с написание полиморфизма,вот написал класс,написал наследование,а вот как теперь сюда...

Полиморфизм - C++
Всем доброго времени суток, Разъясните пожалуйста задание: Создать класс живущих с местоположением . Определить наследуемые классы -...

Полиморфизм. - C++
Доброго времени суток. Помогите решить следующую задачку: Создать класс периодическое издание (название, стоимость экземпляра и...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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