1 | ||||||||||||||||
Производный класс. Перегрузка << (cout).18.01.2012, 20:35. Показов 2914. Ответов 26
Метки нет (Все метки)
При инициализации массива указателей базового класса при вызове cout производный класс не отображается, отображается базовый. Без указателей все в порядке. Подскажите пожалуйста почему.
Вот пример кода: bor.h
0
|
18.01.2012, 20:35 | |
Ответы с готовыми решениями:
26
Разработать производный от абстрактного класса Figure класс и класс, производный от производного Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это? Базовый класс Complex и производный класс для реализации квадратных матриц Создать класс Point и производный класс ColoredPoint (цветная точка) |
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
18.01.2012, 20:54 | 2 | |||||
Вот что я получил, правильно?
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
18.01.2012, 21:11 | 4 | |||||
Вот я щас расскоментил cout
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
18.01.2012, 21:26 | 6 |
Я щас буду работать, буду автоматизирвать ввод (чтоб не вводить руками каждый раз), буду убирать ввод не нужных данных (это всё ты должен был сделать, дабы код был прост), мне нужно знать что можно убрать для нахождения тык скыть ошибки, а что нельзя. Буду это делать пошагово, пока ошибка не исчезнет. Таким образом, я упрощу код, а уже в простом коде буду искать ошибку.
И каждый после очередного упрощения, мне нужно знать- исчезла ошибка или нет; для этого я буду смотреть на вывод. А каким должен быть вывод, я от тебя не могу добиться. Каким должен быть вывод? Предлагаю остановиться на тех данных, что я ввёл. Какого вывода ты ждёшь при этих данных? Просто нарисуй и всё.
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
18.01.2012, 21:52 | 8 |
Я не знаю, что такое свой тип для cout. Для того, чтобы узнать, я должен упростить код. А чтобы упростить код правильно, мне нужно каждый раз после очередного упрощения смотреть- исчезла ошибка или нет. А для этого я должен знать, что ты ожидаешь чтобы cout выводил. И вот когда я буду знать это, я смогу упростить код, а потом уже глядя на просттой код я узнаю, что такое "свой тип для cout"
Всё упирается в то, что должен вывести cout по задумке для предлагаемых данных.
1
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
18.01.2012, 22:08 | 10 | |||||
ф-ия вывода в поток не вируальная.
чтобы вывод в поток зависил от динамического типа объекта, а не от статического, вывод тоже должен быть виртуальной ф-ией. в книжках обычно советуют поступать так:
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
18.01.2012, 22:19 | 11 | |||||
KeyGen, чё-то я не понял, у тебя mass указывает на массив элементов типа Port, нулевой из которых- элемент типа Port, так ты его и получаешь по рисунку это видно. Так, а в массиве mass элемент типа VintagePort это ПЕРВЫЙ элемент. Ты хочешь получить его данные? Ну так напиши
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
||||||
18.01.2012, 22:50 | 13 | |||||
Ну и всё нормально, если ты хочешь чтобы mass[0] указывал на первый элемент сделай просто
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
18.01.2012, 22:51 | 14 | |||||
еще раз попробую объяснить
вот какой у вас оператор <<
Т.к. у вас массив указателей на объекты типа порт, то тип выражения *mass[1] - const Port&; Поэтому всегда будет вызываться оператор << для порта а не для винтажного порта, даже если там указатель на винтажный порт. Если вы сделаете по примеру, который я написал выше, то у вас все заработает так, как вы хотите. Если p ссылается на винтажный порт, то позовется ф-ия печати винтажного порта (потому что она виртуальная и переопределена в винтажном порте)
1
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|||||||||||
18.01.2012, 23:09 | 15 | ||||||||||
Да для винтажного она вызывается, для винтажного. mass [1] указывает на винтажный порт, напишите
Добавлено через 8 минут Вот же написано:
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
||||||
18.01.2012, 23:11 | 16 | |||||
вот упрощенный пример. соберите и посмотрите как все работает
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
18.01.2012, 23:15 | 17 |
А на пальцах? Я пойму...
А вообще если челу надо, чтобы переменная имела значение X, надо ей это значение присвоить а не простыни выкладывать.
0
|
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
|
|
18.01.2012, 23:22 | 18 |
два раза на пальцах объяснил и один раз на примере, что лучше чем пальцы. Если проблемы с пониманием того, как компилятор подбирает ф-ии для вызова - то тут лучше соответствующий материал поизучать (без обид). Еще раз на пример посмотрите. А лучше откомпилируйте и посмотрите, что выводится.
0
|
Жарю без масла
867 / 749 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
|
||||||
18.01.2012, 23:23 | 19 | |||||
этого нет и быть не может, потому что operator>> не является виртуальной ф-ей-членом класса Port.
перегрузка ф-ии (а именно она здесь) осуществляется по статическим типам на этапе компиляции. и на этапе же компиляции генерируется код для вызова
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
18.01.2012, 23:25 | 20 |
Как можно сделать, я знаю, просто мне кажется мой способ более простой, чем ваш. Давайте поговорим тезисно.
1) По окончанию ввода mass[0] указывает на Port, а mass [1] на элемент типа VintagePort Согласны?
0
|
18.01.2012, 23:25 | |
18.01.2012, 23:25 | |
Помогаю со студенческими работами здесь
20
Разработать класс Tableware (посуда) и производный класс Dish (тарелка). Описать атрибуты Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты. Создать базовый класс - Array и производный класс - Money для работы денежной суммы Реализовать класс Pair (пара чисел); определить производный класс Complex (комплексное число) Создать базовый класс Car (машина) и производный класс Lorry (грузовик): ООП ошибки Наследование: базовый класс Квадрат, производный класс Пирамида Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |