Форум программистов, компьютерный форум 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 и сохранить в файл с символом окончания строки. В итоге должен получится текстовый файл с несколькими такими строками. Как лучше реализовать? Создать массив, потом его... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,686
17.02.2011, 13:50     Перегрузка 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/////////////////////////////////////////////////////////////////////////////////////////
//Есть очередная задачка - перегрузить оператор вывода таким образом:
//
//Есть три объекта разных классов - А а, В в, С с;
//
//Нужно, чтобы при записи а << b << c; изменялось значение некоторых членов 
//всех трех классов, ну грубо говоря, пусть там есть по одному члену типа float и пусть 
//при такой записи вывода произойдет нечто вроде
//b.f+=0.2*c.f;
//a.f+=0.8*c.f;
//
//А при любой другой записи - (b<<c<<a, c<<b<<a, b<<a<<c, a<<b<<a) - пусть проводится 
//просто вывод каких-нибудь членов класса, не суть важно. Или даже ошибка за неправильный 
//порядок членов в выводе.
//
//Можно ли это вообще сделать, а если нельзя, то что требуется от этих трех объектов?
//
//Точно известно, что речь про перегрузку вывода, а не перегрузку сдвига.
//С перегрузкой я знаком, но вызывает затруднение именно такой порядок и вообще, наличие 
//3х объектов, о которых идет речь. 
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string  T_str;
/////////////////////////////////////////////////////////////////////////////////////////
class  T_base
{
    float  val_;
    //-----------------------------------------------------------------------------------
public:
    T_base(float  val) : val_(val)
    {}
    //-----------------------------------------------------------------------------------    
    void  set_zero()
    {
        val_ = 0;    
    }
    //-----------------------------------------------------------------------------------
    operator float()
    {
        return  val_;
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
class  A : public T_base
{
public:
    A() : T_base(1)
    {}
};
/////////////////////////////////////////////////////////////////////////////////////////
class  B : public T_base
{
public:
    B() : T_base(2)
    {}
};
/////////////////////////////////////////////////////////////////////////////////////////
class  C : public T_base
{
public:
    C() : T_base(3)
    {}
};
/////////////////////////////////////////////////////////////////////////////////////////
class AB
{
    A&  a_;
    B&  b_;
    //-----------------------------------------------------------------------------------
public:
    AB(A&  a, B&  b) : a_(a), b_(b)
    {}
    //-----------------------------------------------------------------------------------
    AB(const AB&  ab) : a_(ab.a_), b_(ab.b_)
    {}
    //-----------------------------------------------------------------------------------
    void  operator<< (C&  c)
    {
        a_  .set_zero();
        b_  .set_zero();
        c   .set_zero();
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
AB  operator<< (A&  a, B&  b)
{    
    return  AB(a, b);    
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print
    (
        T_str  message,
        A      a,
        B      b,
        C      c
    )
{
    std::cout << message
              << std::endl
              << a
              << " "
              << b
              << " "
              << c
              << std::endl
              << std::endl;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    A  a;
    B  b;
    C  c;
 
    print("Исходные значения:", a, b, c);
      
    //Если раскомментировать какие-либо из нижерасположенных выражений, то выдает ошибку.
    //a << c << b;   
    //b << a << c;
    //b << c << a;
    //c << a << b;
    //c << b << a; 
 
    //a << b << a;
   
    a << b << c;
    print("После оператора a << b << c:", a, b, c);
}
 
Текущее время: 00:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru