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

Перегрузка operator<< - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Открытие и Закрытие дисковода. http://www.cyberforum.ru/cpp-beginners/thread244074.html
Вот такой у меня код #pragma comment(lib,"winmm.lib") #include <iostream> #include <mmsystem.h> using namespace std; int main () { mciSendString("Set cdaudio door open wait", NULL, 0, NULL); mciSendString("Set cdaudio door closed wait", NULL, 0, NULL); }
C++ Найти максимальный четный элемент массива Здравствуйте! Если вам не сложно - напишите пожалуйста программу для нахождения максимального четного элемента массива на Си. http://www.cyberforum.ru/cpp-beginners/thread244068.html
освоение основ C++
я учусь на инженера программного обеспечения на втором курсе. Нам дают всего по чу-чуть, возникла нужда в самообразовании. Как я выяснил для себя, я плохо знаю основы и самому трудно написать программу. Решил самостоятельно пройтись по следующим темам условия, циклы, массивы, указатели, функции, алгоритмы сортировки и поиска, структуры данных. По выполнять упражнения с книги, пописать по больше....
MessageBox выводит китайские(японские) иероглифы C++
DWORD dwRead = 0; DWORD buf_size = 4096; DWORD dwSize = GetFileSize(hFile, NULL); char* pBuffer=(char*)VirtualAlloc(NULL,buf_size,MEM_COMMIT,PAGE_READWRITE); ReadFile(hFile, pBuffer, dwSize, &dwRead, NULL); CString ptr2 = reinterpret_cast<LPCWSTR>(pBuffer); MessageBox(ptr2)
C++ МАТРИЦА РАССТОЯНИЙ ГРАФА http://www.cyberforum.ru/cpp-beginners/thread244052.html
Доброго времени суток! Помогите пожалуйста! Пытаюсь написать программу, которая находила бы матрицу расстояний по матрице смежности. Обыскала всевозможные источники информации. Нашла алгоритм нахождения матрицы расстояний с помощью алгоритма Флойда. Но программа находит матрицу расстояний не для всех графов, а если быть точной, для ограниченного числа неориентированных графов. Для орграфов не...
C++ Вывести середину строк (между кавычками) в файл Есть файл. Из него читаю по строкам if (strstr( s, " Как можно из каждой найденной такой строки вытянуть текст, находящийся между кавычками? Из строчки нужно выдернуть текст между кавычек 8/8/8/8/1Q6/1K6/8/2Nk4 w - - 0 1 и сохранить в файл с символом окончания строки. В итоге должен получится текстовый файл с несколькими такими строками. Как лучше реализовать? Создать массив, потом его... подробнее

Показать сообщение отдельно
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
17.02.2011, 15:21     Перегрузка operator<<
вот мой вариант

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <sstream>
#include <string>
 
using namespace std;
 
class Base{
public:
  virtual string toString() = 0;
};
 
class A : public Base{
public:
  string toString(){ return "a"; }
};
 
class B : public Base{
  string toString(){ return "b"; }
};
 
class C : public Base{
  string toString(){ return "c"; }
};
 
class Manager{
private:
  unsigned uCount;
  stringstream str;
  bool bIsGood;
public:
  Manager() : uCount(0), str( stringstream::in | stringstream::out ), 
                     bIsGood( true )
  {
  
  }
 
  void out( ostream& os, Base* b ){
    if( bIsGood ){
      switch( uCount ){
      case 0:
         if( !dynamic_cast<A*>( b ) ){
           bIsGood = false;
         } 
         break;
      case 1:
         if( !dynamic_cast<B*>( b ) ){
           bIsGood = false;
         } 
         break;
      case 2:
         if( !dynamic_cast<C*>( b ) ){
           bIsGood = false;
         } 
         break;     
      }
      if( bIsGood ){
         str << b->toString();
      }else{
         str.str("");
      }
    }
 
    if( 2 == uCount ){
      if( bIsGood ){
         os << str.str();
      }
      uCount = 0;
      bIsGood = true;
    }else{
      ++uCount;
    }
  }
};
 
Manager man;
 
#define MACRO( OS, OBJ ) \
  man.out( OS, &OBJ );   \
  return OS;
  
 
ostream& operator<<( ostream& os, A& obj ){
  MACRO( os, obj );
}
 
ostream& operator<<( ostream& os, B& obj ){
  MACRO( os, obj );
}
 
ostream& operator<<( ostream& os, C& obj ){
  MACRO( os, obj );
}
 
int main(){
  A a;
  B b;
  C c;
 
  cout << a << b << b << endl;
  cout << a << b << c << endl;
  cout << b << a << c << endl;
  cout << a << b << c << endl;
 
}
Bash
1
2
3
4
5
[alexxx@localhost ~]$ ./a.out 
 
abc
 
abc
Добавлено через 4 минуты
про изменение полей объектов, тут уже в каждом операторе отдельные действия
 
Текущее время: 17:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru