27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|
1 | |
Наследование ostream10.07.2012, 16:59. Просмотров 3759. Ответов 36
Метки нет Все метки)
(
Я наследовал от ostream класс, перегрузил operator<<(const char *)
для одного типа данных, и создал объект newcout, однако он почему-то не может выводить int. Почему?
0
|
|
10.07.2012, 16:59 | |
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? friend ostream &operator<<(ostream &stream, MyClass o); Friend ostream& operator<<(ostream& stream, CArr& obj); |
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|||||||||||
10.07.2012, 17:40 [ТС] | 3 | ||||||||||
alsav22,
Код
0
|
Jupiter
|
10.07.2012, 18:13
#4
|
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|
10.07.2012, 18:28 [ТС] | 5 |
Jupiter, у тебя есть другой вариант?
Да и по теме-то ты знаешь чего?
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
||||||
10.07.2012, 18:33 [ТС] | 7 | |||||
alsav22, почему? Я же не создаю указатель типа ostream, а просто наследую от него и создаю объект.
Это все равно, что
0
|
В астрале
![]() 8028 / 4785 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
|
|
10.07.2012, 18:38 | 8 |
Ksan, Да-с, только теперь в этом коде закройте конструктор по умолчанию в A, тупо объявите его в private секции и попробуйте)
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|
10.07.2012, 18:40 [ТС] | 9 |
ForEveR, объяснишь, почему так?
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|||||||||||
10.07.2012, 18:53 | 10 | ||||||||||
При создании объекта производного класса, всегда, сначала, создаётся объект базового класса. Поэтому, или, в конструкторе производного класса, через список инициализаторов создаётся и инициализируется объект базового класса (чего у вас нет) или это делает конструктор по умолчанию базового класса. В классе ostream такого конструктора нет.
Добавлено через 9 минут Для примера. Вот так должно быть:
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|
10.07.2012, 18:56 [ТС] | 11 |
alsav22, убрал конструктор. Но все равно, инты не выводит
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
||||||
10.07.2012, 19:07 [ТС] | 13 | |||||
Он же должен наследовать функции ostream, а там выводы интов есть
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
10.07.2012, 21:38 | 14 |
Должен. Если создадите объект класса Rostream. А создать его невозможно. Почему я уже объяснил.
Наследование как раз и заключается в том, что в объекте производного класса присутствует и объект базового класса. А при создании объекта вашего класса, объект базового не может быть создан. Добавлено через 7 минут И в чём, вообще, идея такой перегрузки? Обычно оператор << перегружают в своих классах для того, чтобы можно было использовать конструкции типа: cout << my_object Добавлено через 2 часа 12 минут Там есть, но вы же хотите, чтобы объёкт вашего класса выводил int с помощью <<. Значит << надо перегрузить и для int.
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|
10.07.2012, 21:40 [ТС] | 15 |
alsav22, русский язык выводит корректно
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
10.07.2012, 22:00 | 16 | |||||
Вот этот код работает в том смысле, что объект класса Rostream выводит на консоль с помощью << строки и int.
код
Добавлено через 7 минут Идею понял. Этот код русские буквы выводит нормально. Достаточно #include <Windows.h> и #include <fstream> (это для конструктора базового класса). Чтобы другие типы данных выводились объектами Rostream, нужно и для них перегрузить << , так же как для int.
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|
10.07.2012, 22:03 [ТС] | 17 |
alsav22, объясни что ты сделал и что такое filebuf?
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
10.07.2012, 22:10 | 18 |
Для конструктора объекта ostream нужен объект streambuf http://www.cplusplus.com/refer... m/ostream/ Единственное, что я нашёл подходящего, это filebuf (буфер для файлового ввода- вывода). Наверное, можно как-то и по другому сделать. Тут у меня знаний не хватает.
0
|
27 / 27 / 4
Регистрация: 02.11.2010
Сообщений: 370
|
|||||||||||
10.07.2012, 22:14 [ТС] | 19 | ||||||||||
alsav22, я пытался сделать через
Добавлено через 2 минуты Кстати, что означает эта запись? Не по теме: Я гуглил...
0
|
5477 / 4872 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
10.07.2012, 22:14 | 20 |
Ничего особенного не делал. Нужно было выяснить, как создать объект ostream, чтобы использовать это в конструкторе Rostream.
0
|
10.07.2012, 22:14 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. ostream
Шаблонный ostream Ostream istream Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |