Форум программистов, компьютерный форум 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
23.02.2011, 19:26     Перегрузка 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
#include <cassert>
#include <string>
#include <iostream>
 
class Base{
public:
  int value;
  Base( int _value ) : value( _value ) {}
  virtual std::string getName() = 0;
};
 
#define CLASS(NAME)                  \
class NAME : public Base{            \
public:                              \
  NAME( int _value) : Base(_value){} \
  virtual std::string getName(){     \
    return #NAME;                    \
  }                                  \
};                               
 
 
#define BEGIN_SWITCH( COUNT )                \
do{                                          \
  switch( COUNT ) { 
 
#define CASE( NUM, TYPE, OBJ, GOOD, LP )     \
case NUM :                                   \
  if( !dynamic_cast<TYPE*>( OBJ ) ){         \
    GOOD = false;                  \
  }                                                    \
  LP[NUM] = OBJ;                             \
  break;
 
#define END_SWITCH()                         \
  default: assert( 0 );                      \
}} while(0)
 
CLASS(A);
CLASS(B);
CLASS(C);
 
Base& operator<<( Base& a, Base& b ){
  static unsigned uCount = 0;
  static bool bIsGood = true;
  static Base* lpB[3];
 
  std::cout << a.getName() << b.getName() << uCount << bIsGood << std::endl;
 
  BEGIN_SWITCH( uCount )
    CASE( 0, A, &a, bIsGood, lpB )
    CASE( 1, B, &a, bIsGood, lpB )
    CASE( 2, C, &a, bIsGood, lpB )
  END_SWITCH();
  if( 1 == uCount ){
    ++uCount;
    return b << b;
  }else if( 2 == uCount ){
    if( bIsGood ){
      //std::cout << "!\n";
      lpB[0]->value = lpB[1]->value * lpB[2]->value;
    }
    uCount = 0;
    bIsGood = true;
  }else{
    ++uCount;
  }
  return b;
}
 
int main(){
  A a(1);
  B b(2);
  C c(3);
  a << b << c;
  std::cout << a.value << std::endl;  
  a.value = 0;
 
  b << b << c;
  std::cout << a.value << std::endl;  
  a.value = 0;
 
  c << b << a;
  std::cout << a.value << std::endl;  
  a.value = 0;
 
  a << b << c;
  std::cout << a.value << std::endl;  
  a.value = 0;
 
}
вот, насколько я понял

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[alexxx@localhost ~]$ g++ 6.cpp && ./a.out 
AB01
BC11
CC21
6
BB01
BC10
CC20
0
CB01
BA10
AA20
0
AB01
BC11
CC21
6
 
Текущее время: 16:54. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru