Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24

Вывод данных в поток у наследованного класса

22.09.2014, 17:20. Показов 3440. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток. Подскажите, как в С++ вывести данные унаследованного класса при помощи потока ostream.
Как я прочитал в рекомендациях , то в классе не желательны функции для вывода информации. Таким образом я создаю дружественную функцию и при помощи потока ostream и перегрузки оператора "<<" вывожу данные на экран. Но вот загвоздка, если я такое делаю в базовом классе "а", то не могу повторить в классе наследнике "b". Может кто подскажет как правильно поступить в данном случае? По поиску найти ничего не смог.
Вот внизу набросал самый примитивный код, он работает, но при попытке добавить строку friend ostream &operator<<(ostream &, b &); в класс "b" и создать еще одну дружественную функцию, но уже для класса "b", что бы она выводила в т.ч. и данные класса "b" не получается. Я даже вроде понимаю почему - программа не может понять какая функция перегрузки оператора "<<" к какой функции относится, но как это обойти!?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
#include <fstream>
using namespace std;
 
class a
{
       private:
            int number1;    
       public:
            a(){number1 = 10;};
           ~a(){};
           friend ostream &operator<<(ostream &, a &);
};
 
class b: public a
{
       private: 
               int number2;
    public:
        b():a(){number2 =20;};
        ~b(){};
};
 
ostream &operator<<(ostream &obj, a &tmp)
{
    cout<<tmp.number1;
    return obj;
}
 
void main()
{
    a n1;
    b n2;
    cout<<n1<<endl;
       //cout<<n2<<endl; как реализовать?
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2014, 17:20
Ответы с готовыми решениями:

Привязка данных к свойству наследованного от List класса
Всем привет! Имеется класс MyClass, и есть класс MyClassList, наследованный от List&lt;MyClass&gt; В классе MyClassList есть свойство int...

Использование метода из наследованного класса к объекту базового класса
Есть метод public void OpExp() { if (Person._age&lt;18) Console.WriteLine(&quot;Вы не можете...

Создание наследованного класса
Создать класс четырехугольник, члены класса – координаты 4-х точек. Предусмотреть в классе методы вычисления и вывода сведений о...

3
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
22.09.2014, 18:09
Ну, типа так можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class base
{
   int val = 10;
public:
   friend std::ostream& operator << (std::ostream& os, const base& b)
   {
      return os << "base: " << b.val << "\n";
   }
   virtual ~base() {}
};
 
class derived : public base
{
   int num = 20;
public:
   friend std::ostream& operator << (std::ostream& os, const derived& d)
   {
      return os << static_cast<base>(d) << "derived: " << d.num << "\n";
   }
};
 
 
int main()
{
   base b;
   derived d;
   std::cout << b;
   std::cout << d;
 
   return 0;
}
Добавлено через 9 минут
Или так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class base
{
   int val = 10;
public:
   virtual std::ostream& print(std::ostream& os) const
   {
      return os << "base: " << val << "\n";
   }
   virtual ~base() {}
};
 
class derived : public base
{
   int num = 20;
public:
   virtual std::ostream& print(std::ostream& os) const
   {
      return base::print(os) << "deerived: " << num << "\n";
   }
};
 
std::ostream& operator << (std::ostream& os, const base& b)
{
   return b.print(os);
}
0
0 / 0 / 0
Регистрация: 27.03.2014
Сообщений: 24
22.09.2014, 19:40  [ТС]
Спасибо, скажите, а откуда Вы этот код взяли? С какой-то книги?

И еще, в первом варианте функция реализована в самом классе , а возможно ли ее объявить в классе , а реализовать отдельно? Чтобы в хидере объявить класс и его функции, а их исполнение реализовать в отдельном файле.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 08:56
Цитата Сообщение от CheburatorUA Посмотреть сообщение
И еще, в первом варианте функция реализована в самом классе , а возможно ли ее объявить в классе , а реализовать отдельно? Чтобы в хидере объявить класс и его функции, а их исполнение реализовать в отдельном файле.
Возможно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2014, 08:56
Помогаю со студенческими работами здесь

Текст наследованного класса типа button
здравствуйте создал я свой собственный класс вопрос как вывести текст на эту область public class MyButton : UserControl { ...

Хранение в стеке оригинального класса и наследованного от него
Здравствуйте, по заданию необходимо хранить в одном стеке оригинальный класс и наследованный от него. Можете подсказать, как это сделать?...

Ошибка в шаблоне класса (вывод в поток)
Помогите пожалуйста понять что не так: // list.h template&lt;class K, class V&gt; class List { public: ... template...

Qt. Как задать точное расположение на графической сцене объекту класса, наследованного от QWidget
Как задать точное расположение на графической сцене объекту класса, наследованного от QWidget. Дело в том, что для QGrpahicsItem есть метод...

Использование класса object для передачи данных в поток
Здравствуйте. Вот идея кода. public partial class Form1 : Form { Thread поток=new Thread(последовательность); public static...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru