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

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

Восстановить пароль Регистрация
 
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
23.09.2013, 22:53     Почему программа ничего не выводит (перегрузка операторов)? #1
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2013, 22:53     Почему программа ничего не выводит (перегрузка операторов)?
Посмотрите здесь:

C++ перегрузка операторов C++
C++ Перегрузка операторов
Перегрузка функций и операторов, почему программа не работает? C++
Почему ничего не выводит? C++
Перегрузка операторов C++
не могу найти ошибку, программа ничего не выводит C++
Перегрузка операторов C++
C++ Перегрузка операторов - Оба случая работают правильно, почему так?

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 18:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru