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

Почему программа ничего не выводит (перегрузка операторов)? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ создать дерево http://www.cyberforum.ru/cpp-beginners/thread960822.html
1.Из входного потока (файла) поступает текст, состоящий из слов, которые разделены пробелами. Между словами может быть более одного пробела. Разобрать текст по символам, упорядочив его путем сортировки двоичным деревом. Под символами в данном случае подразумеваются лишь те, которые входят в слова. 2.Разобрать дерево по символам.Построить таблицу из всех различных символов текста с указанием...
C++ Разница между объявлениями const Person p1 и Person const p1 Всем привет. Собственно весь вопрос уместился в заголовок: в чем разница между объявлениями const Person p1 и Person const p1, если Person - это класс. Спасибо. http://www.cyberforum.ru/cpp-beginners/thread960818.html
Обработка мыши VS C++ C++
Как можно обрабатывать события мышки в с++? К примеру, хочу написать игру http://ru.wikipedia.org/wiki/%D0%92%D0%BE%D0%B9%D0%BD%D0%B0_%D0%B2%D0%B8%D1%80%D1%83%D1%81%D0%BE%D0%B2 и ход представляю себе, как выбор места и нажатие на него мышью, куда надо расположить крестик или нолик на доске. Какими средствами можно работать с мышью в с++? Добавлено через 20 часов 59 минут Может быть, я не в...
C++ С++ напишите, что делает каждая строчка в этом коде?!
#include "stdafx.h" #include <iostream> using namespace std; int sum (int a, int m) { int s=0; for (int i=0; i<a; i++) {
C++ Переменная уже определена в Form_5.obj http://www.cyberforum.ru/cpp-beginners/thread960804.html
Здравствуйте, я наткнулся на следующую проблему и не могу решить. Вот имеется код файла Form_5.h: #ifndef _FORM5_H #define _FORM5_H typedef struct { char *s; // Указатель на строку unsigned max; // Максимальное количество символов в строке, определяющееся при инициализации unsigned N; // Динамическая (текущая) длина строки } str;
C++ Алгоритм Тасовки bool baCardsDealt; void Shuffle(bool baCardsDealt) { for (int iIndex = 0; iIndex < 52; ++iIndex) { baCardsDealt = false; } } подробнее

Показать сообщение отдельно
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182

Почему программа ничего не выводит (перегрузка операторов)? - C++

23.09.2013, 22:53. Просмотров 342. Ответов 0
Метки (Все метки)

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
#include <iostream>
#include <stdio.h>
#include <math.h>
#define M 100
 
using namespace std;
 
struct Item
{
    float x;
    float y;
};
 
class figure{
    private:
        Item massiv[M];
        int amount;
    public:
        figure();
        void operator += (Item);
        friend istream& operator >> (istream&, figure&);
        friend ostream& operator << (ostream&, figure&);
};
 
figure::figure()
{
    amount = 0;
    for(int i = 0; i < M; i++)
    {
        massiv[i].x = 0;
        massiv[i].y = 0;
    }
}
 
void figure::operator += (Item node)
{
    massiv[amount] = node;
    amount++;
}
 
istream &operator >> (istream &input, figure &f)
{
    int n;
    Item node;
    cout << endl;
    cout << "Amount of vertices = ";
    cin >> n;
    cout << endl;
    cout << "Input coordinates of vertices\n" << endl;
    for (int i = 0; i < n; i++)
    {
        cout << i+1 << ") ";
        cout << "x = "; cin >> node.x;
        cout << "   y = "; cin >> node.y;
        f += node;
    }
    return input;
}
 
ostream &operator << (ostream &output, figure &f)
{
    output << endl;
    output << "Coordinates of vertices:" << endl;
    for (int i = 0; i < f.amount; i++)
    {
        output << i+1 << ") ";
        output << "x = " << f.massiv[i].x << "; ";
        output << "y = " << f.massiv[i].y << ";";
        output << endl;
    }
    return output;
}
 
int D_Add_vertex(figure f)
{
    cin >> f;
    return 1;
}
 
int D_Coordinates_of_vertices(figure f)
{
    cout << f;
    return 1;
}
 
int dialog(const char *msgs[], int);
const char *msgs[] = {"0. Quit\n", "1. Add vertex\n", "2. Coordinates of vertices\n"};
const int NMsgs = sizeof(msgs) / sizeof(msgs[0]);
int (*fptr[])(figure) = {NULL, D_Add_vertex, D_Coordinates_of_vertices};
 
int main()
{
    figure f;
    int rc;
    while(rc = dialog(msgs, NMsgs))
        if(!fptr[rc](f))
            break;
    cout << "That's all, bye!" << endl;
    return 0;
}
 
int dialog(const char *msgs[], int N)
{
    const char *errmsg = "";
    int i, n;
    do{
        puts(errmsg);
        errmsg = "You are wrong. Repeate, please!";
        for(i = 0; i < N; ++i)
            cout << msgs[i];
        cout << endl << "Make your choice: --> ";
        cin >> n;
    } while(n < 0 || n >= N);
    return n;
}
1 - добавить
2 - вывести, но ничего не выводит

Ошибка скорее всего связана с указателями.

Если не знаете, то скажите хотя бы, как использовать перегруженный оператор [ ] для указателя на класс *f.

Добавлено через 15 минут
Если добавить указатели * , то все работает, но почему без них не выводит?
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
#include <iostream>
#include <stdio.h>
#include <math.h>
#define M 100
 
using namespace std;
 
struct Item
{
    float x;
    float y;
};
 
class figure{
    private:
        Item massiv[M];
        int amount;
    public:
        figure();
        void operator += (Item);
        friend istream& operator >> (istream&, figure&);
        friend ostream& operator << (ostream&, figure&);
};
 
figure::figure()
{
    amount = 0;
    for(int i = 0; i < M; i++)
    {
        massiv[i].x = 0;
        massiv[i].y = 0;
    }
}
 
void figure::operator += (Item node)
{
    massiv[amount] = node;
    amount++;
}
 
istream &operator >> (istream &input, figure &f)
{
    int n;
    Item node;
    cout << endl;
    cout << "Amount of vertices = ";
    input >> n;
    cout << endl;
    cout << "Input coordinates of vertices\n" << endl;
    for (int i = 0; i < n; i++)
    {
        cout << i+1 << ") ";
        cout << "x = "; input >> node.x;
        cout << "   y = "; input >> node.y;
        f += node;
    }
    return input;
}
 
ostream &operator << (ostream &output, figure &f)
{
    output << endl;
    output << "Coordinates of vertices:" << endl;
    for (int i = 0; i < f.amount; i++)
    {
        output << i+1 << ") ";
        output << "x = " << f.massiv[i].x << "; ";
        output << "y = " << f.massiv[i].y << ";";
        output << endl;
    }
    return output;
}
 
int D_Add_vertex(figure *f)
{
    cin >> *f;
    return 1;
}
 
int D_Coordinates_of_vertices(figure *f)
{
    cout << *f;
    return 1;
}
 
int dialog(const char *msgs[], int);
const char *msgs[] = {"0. Quit\n", "1. Add vertex\n", "2. Coordinates of vertices\n"};
const int NMsgs = sizeof(msgs) / sizeof(msgs[0]);
int (*fptr[])(figure*) = {NULL, D_Add_vertex, D_Coordinates_of_vertices};
 
int main()
{
    figure f;
    int rc;
    while(rc = dialog(msgs, NMsgs))
        if(!fptr[rc](&f))
            break;
    cout << "That's all, bye!" << endl;
    return 0;
}
 
int dialog(const char *msgs[], int N)
{
    const char *errmsg = "";
    int i, n;
    do{
        puts(errmsg);
        errmsg = "You are wrong. Repeate, please!";
        for(i = 0; i < N; ++i)
            cout << msgs[i];
        cout << endl << "Make your choice: --> ";
        cin >> n;
    } while(n < 0 || n >= N);
    return n;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru