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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Sammm
3 / 3 / 1
Регистрация: 21.10.2012
Сообщений: 182
#1

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

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

Перегрузка функций и операторов, почему программа не работает? - C++
Помогите пожалуйста разобраться почему не работает программа? Создать класс 2-D координат. Определить операторы &quot;+&quot; и &quot;-&quot; как...

Почему в коде не работает перегрузка операторов? - C++
Почему не работает перегрузка? #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std;

Перегрузка операторов - Оба случая работают правильно, почему так? - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;conio.h&quot; #include &quot;windows.h&quot; using namespace::std; class Int{ private: ...

не могу найти ошибку, программа ничего не выводит - C++
Не выводится комбинация из 5 единиц или нулей, не могу найти ошибку, подскажите пожалуйста, где ошибся:cry: Само задание: Дана строка,...

Почему программа выводит значение 0? - C++
#include &lt;iostream&gt; //Включение библиотек #include &lt;math.h&gt; using namespace std; //Использование пространства имен void...

Почему программа не выводит число? - C++
Работаю на visual studio 2010 Программа выводит пустую консоль. В чем дело, помогите пожалуйста.

Почему программа выводит вместо минимальной суммы последовательности последний элемент? - C++
Программа выводит вместо минимальной суммы последовательности последний элемент. Подскажите пожалуйста, что не так с кодом? #include...

Перегрузка операторов - C++
Всем привет. Предположим, что нужно перегрузить оператор вывода &lt;&lt; для какого-то класса, определенного мной. Этот оператор должен выводить...

Перегрузка операторов - C++
Здравствуйте. Есть класс, переменной членом которого является массив. Необходимо, перегрузить операторы так, чтоб к объектам класса...

Перегрузка операторов - C++
ifstream ifile(&quot;open.txt&quot;); if(! ifile) { } Как реализовать класс, что бы можно было писать: A a;


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru