Форум программистов, компьютерный форум 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);...
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*...
C++ МАТРИЦА РАССТОЯНИЙ ГРАФА http://www.cyberforum.ru/cpp-beginners/thread244052.html
Доброго времени суток! Помогите пожалуйста! Пытаюсь написать программу, которая находила бы матрицу расстояний по матрице смежности. Обыскала всевозможные источники информации. Нашла алгоритм...
C++ Вывести середину строк (между кавычками) в файл Есть файл. Из него читаю по строкам if (strstr( s, " Как можно из каждой найденной такой строки вытянуть текст, находящийся между кавычками? Из строчки нужно выдернуть текст между кавычек... подробнее

Показать сообщение отдельно
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.02.2011, 15:21
вот мой вариант

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 минуты
про изменение полей объектов, тут уже в каждом операторе отдельные действия
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru