Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 1
Регистрация: 14.05.2014
Сообщений: 39
1

Вызов перегруженного оператора

01.06.2015, 21:26. Показов 1651. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В классе Ellipse есть перезагрузка, не могу ее вызвать в main


вот само задание:
Создать класс Ellipse,содержащий следующие элементы:
- поле «центр» Point *Center,-
поле «малый радиус» floata;
- поле «большой радиус» float b;
- метод получения координат центра Point GetCenter ()
- метод получения малого радиуса float Get_a ()
- метод получения большого радиуса float Get_b ()
- метод проверки, является эллипс окружностью int isCircle ()
- конструктор с параметрами Ellipse(Point * Center, float a, float b);
Создать класс Point,содержит элементы:
- поле «координата X» floatX,-
поле «координата Y» floatY;
- метод установки координат void SetCoordinate (float X, floatY)
- метод получения координаты X float Get()
- метод получения координаты Y float Get()
- конструктор с параметрами Point (float X, float Y);
В классе Ellipse перегрузить оператор - (бинарный, дружественный оператор), новое действие - вернуть расстояние между центрами эллипсов.



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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
#include "stdafx.h"
#include <math.h>
#include "iostream"
#include "windows.h"
#include <fstream>
#include <sstream>
 
 
using namespace std;
 
// Создать класс Point, что имеет элементы:
class Point
{
    // поле «координат X» float X;
    float X;
    // поле «координат Y» float Y;
    float Y;
 
public:
 
    // метод установки координат void SetCoordinate(float X, float Y);
    void SetCoordinate ( float pX , float pY )
    {
        X = pX;
        Y = pY;
    }
 
    // метод получения координат X float Get();
    float GetX()
    {
        return X;
    }
 
    // метод получения координат Y float Get();
    float GetY()
    {
        return Y;
    }
 
    // Конструктор без параметров Point();
    Point()
        : X(0.f)
        , Y(0.f)
    {       
    }
 
};
 
 
class Ellips
{
    // поле «центр» Point* Center
    Point* Center;
    // поле «малый радиус» float a;
    float a;
    // поле «большой радиус» float b;
    float b;
 
public:
    Ellips(Point* pCenter, float pA, float pB);
    // метод получения малого радиуса float Get_a();
    float Get_a()
    {
        return a;
    }
 
    // метод получения большого радиуса float Get_b();
    float Get_b()
    {
        return b;
    }
 
    // метод проверки, является ли эллипс окружностью int isCircle();
    int isCircle()
    {
        return a == b;
    }
 
 
    Point GetCenter() 
    
    {
        return *this->Center;
    }
 
     
    // перезагрузить оператор - (бинарний, дружественный оператор), новое действие – вернуть расстояние между центрами Элипсов.
     friend float operator-(Ellips pEllipse1, Ellips pEllipse2)
    {
        float result = pow(pEllipse2.Center->GetX() - pEllipse1.Center->GetX(), 2);
        result += pow(pEllipse2.Center->GetY() - pEllipse1.Center->GetY(), 2);
        result = sqrt(result);
        return result;
    }
 
};
    // конструктор с параметрами Ellipse(Point* Center, float a, float b);
Ellips::Ellips(Point* pCenter, float pA, float pB)
    {
        this->Center=pCenter;
        this->a=pA;
        this->b=pB;
    }
 
 
int main(int argc, char* argv[])
{               
                ofstream f ("../kr.txt", ios::trunc);
                SetConsoleCP(1251);        //рус. яз
                SetConsoleOutputCP(1251);  //рус. яз
                cout<<"                                  Курсовая работа                                "<<endl;
                float X, Y, a, b;
                int i,u=0;
                cout << "Введите х, y, а, b"<<endl;
                cout << "x: ";     cin >> X;
                cout <<endl<< "y: ";    cin >> Y;
                cout <<endl<< "a: ";  cin >> a;
                cout <<endl<< "b: ";  cin >> b;
                Point clPoint; // объявление объекта
                Ellips clEllipse(&clPoint,a,b);
                
 
        do {
        system("cls");
        cout<<"                                  Курсовая работа                             "<<endl;
        cout<<"Выбирите нужную вам операцию"<<endl<<"1 - Вызвать поля класса"<<endl<<"2 - Вызвать методы"<<endl<<"3 - записать данные в файл"<<endl<<"4 - Выход"<<endl;
        cin>>i;
        system("cls");
        switch ( i )
        {
        
        
            case 1:{
                    
                    clPoint.SetCoordinate(X,Y); // инициализация точек в классе
                    cout<<endl<<"Метод получения X и Y"<<endl;
                    cout<<"X= "<<clPoint.GetX()<<endl;// инициализация точки X и вывод
                    cout<<"Y= "<<clPoint.GetY()<<endl;// инициализация точки Y и вывод
                    cout<<"Радиус a="<<clEllipse.Get_a()<<endl;
                    cout<<"Радиус b="<<clEllipse.Get_b()<<endl;
                    system("pause");
                    break;
                   }
            case 2:{
                    if (clEllipse.isCircle()==1) cout<<"Эллипс является окружностью"<<endl; else cout<<"Эллипс не является окружностью"<<endl; //проверка, если а и b равны то выводит 1
 
                    //cout << clEllipse.GetCenter()<<endl;
                    system("pause");
                    break;
                   }
 
            
            case 3:{
                        ofstream f ("../kr.txt", ios::trunc);
                        f<<"X= "<<X<<"\n";
                        f<<"Y= "<<Y<<"\n";
                        f<<"a= "<<a<<"\n";
                        f<<"b= "<<b<<"\n";
                        if (clEllipse.isCircle()==1) f<<"Эллипс является окружностью"<<"\n"; else f<<"Эллипс не является окружностью"<<"\n";
                        cout<<"Информация записана"<<endl;
                        system("pause");
                        break;
                   }
            case 4:u=1;
        }
        }
        while(u==0);
 
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.06.2015, 21:26
Ответы с готовыми решениями:

Использование перегруженного оператора <<
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;vector&gt; #include &lt;string&gt; #include &lt;algorithm&gt;...

Странный вывод перегруженного оператора
Здравствуйте. Делаю цепочки вывода, но получается вот что: Почему выводится число 0x605508 ?...

Возврат ссылки от функции перегруженного оператора
Здравствуйте, меня интересует вопрос, когда функция-член класса, к примеру перегруженного оператора...

Указатель this внутри перегруженного оператора сложения
пишу класс Fraction для работы с дробными числами. Почему не допускает использовать this, пишет:...

3
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
01.06.2015, 21:32 2
Лучший ответ Сообщение было отмечено andru160596 как решение

Решение

C++
1
2
3
4
 Ellips clEllipse1(&clPoint,a,b);
...
Ellipse clEllipse2(&clPoint,a,b);
float dist=clEllipse1-clEllipse2;
0
1 / 1 / 1
Регистрация: 14.05.2014
Сообщений: 39
01.06.2015, 22:04  [ТС] 3
Создал второй объект но не могу вызвать перезагрузку, не работает

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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include "stdafx.h"
#include <math.h>
#include "iostream"
#include "windows.h"
#include <fstream>
#include <sstream>
 
 
using namespace std;
 
// Создать класс Point, что имеет элементы:
class Point
{
    // поле «координат X» float X;
    float X;
    // поле «координат Y» float Y;
    float Y;
 
public:
 
    // метод установки координат void SetCoordinate(float X, float Y);
    void SetCoordinate ( float pX , float pY )
    {
        X = pX;
        Y = pY;
    }
 
    // метод получения координат X float Get();
    float GetX()
    {
        return X;
    }
 
    // метод получения координат Y float Get();
    float GetY()
    {
        return Y;
    }
 
    // Конструктор без параметров Point();
    Point()
        : X(0.f)
        , Y(0.f)
    {       
    }
 
};
 
 
class Ellips
{
    // поле «центр» Point* Center
    Point* Center;
    // поле «малый радиус» float a;
    float a;
    // поле «большой радиус» float b;
    float b;
 
public:
    Ellips(Point* pCenter, float pA, float pB);
    // метод получения малого радиуса float Get_a();
    float Get_a()
    {
        return a;
    }
 
    // метод получения большого радиуса float Get_b();
    float Get_b()
    {
        return b;
    }
 
    // метод проверки, является ли эллипс окружностью int isCircle();
    int isCircle()
    {
        return a == b;
    }
 
 
    Point GetCenter() 
    
    {
        return *this->Center;
    }
 
     
    // перезагрузить оператор - (бинарний, дружественный оператор), новое действие – вернуть расстояние между центрами Элипсов.
     friend float operator-(Ellips pEllipse1, Ellips pEllipse2)
    {
        float result = pow(pEllipse2.Center->GetX() - pEllipse1.Center->GetX(), 2);
        result += pow(pEllipse2.Center->GetY() - pEllipse1.Center->GetY(), 2);
        result = sqrt(result);
        return result;
    }
 
};
    // конструктор с параметрами Ellipse(Point* Center, float a, float b);
Ellips::Ellips(Point* pCenter, float pA, float pB)
    {
        this->Center=pCenter;
        this->a=pA;
        this->b=pB;
    }
 
 
int main(int argc, char* argv[])
{               
                ofstream f ("../kr.txt", ios::trunc);
                SetConsoleCP(1251);        //рус. яз
                SetConsoleOutputCP(1251);  //рус. яз
                cout<<"                                  Курсовая работа                                "<<endl;
                float X, Y, A, B, a,b,x,y;
                int i,u=0;
                cout << "Введите х, y, а, b для 2х эллипсов"<<endl;
                cout << "Х: ";     cin >> X;
                cout <<endl<< "У: ";    cin >> Y;
                cout <<endl<< "A: ";  cin >> A;
                cout <<endl<< "B: ";  cin >> B;
                cout <<endl<< "x: ";     cin >> x;
                cout <<endl<< "y: ";    cin >> y;
                cout <<endl<< "a: ";  cin >> a;
                cout <<endl<< "b: ";  cin >> b;
                Point clPoint1; // объявление объекта
                Ellips clEllipse1(&clPoint1,A,B);
                Point clPoint2; // объявление объекта
                Ellips clEllipse2(&clPoint2,a,b);
 
 
 
 
                
 
        do {
        system("cls");
        cout<<"                                  Курсовая работа                             "<<endl;
        cout<<"Выбирите нужную вам операцию"<<endl<<"1 - Вызвать поля класса"<<endl<<"2 - Вызвать методы"<<endl<<"3 - записать данные в файл"<<endl<<"4 - Выход"<<endl;
        cin>>i;
        system("cls");
        switch ( i )
        {
        
        
            case 1:{
                    cout<<"                Эллипс 1               "<<endl;
                    clPoint1.SetCoordinate(X,Y); // инициализация точек в классе
                    cout<<endl<<"Метод получения X и Y"<<endl;
                    cout<<"X= "<<clPoint1.GetX()<<endl;// инициализация точки X и вывод
                    cout<<"Y= "<<clPoint1.GetY()<<endl;// инициализация точки Y и вывод
                    cout<<"Радиус A="<<clEllipse1.Get_a()<<endl;
                    cout<<"Радиус B="<<clEllipse1.Get_b()<<endl;
 
                    cout<<"                Эллипс 2               "<<endl;
 
                    clPoint2.SetCoordinate(x,y); // инициализация точек в классе
                    cout<<endl<<"Метод получения x и y"<<endl;
                    cout<<"x= "<<clPoint2.GetX()<<endl;// инициализация точки X и вывод
                    cout<<"y= "<<clPoint2.GetY()<<endl;// инициализация точки Y и вывод
                    cout<<"Радиус a="<<clEllipse2.Get_a()<<endl;
                    cout<<"Радиус b="<<clEllipse2.Get_b()<<endl;
                    system("pause");
                    break;
                   }
            case 2:{
                    float dist=clEllipse1-clEllipse2;
                    if (clEllipse1.isCircle()==1) cout<<"Эллипс является окружностью"<<endl; else cout<<"Эллипс не является окружностью"<<endl; //проверка, если а и b равны то выводит 1
 
                    //cout << clEllipse.GetCenter()<<endl;
                    system("pause");
                    break;
                   }
 
            
            case 3:{
                        ofstream f ("../kr.txt", ios::trunc);
                        f<<"X= "<<X<<"\n";
                        f<<"Y= "<<Y<<"\n";
                        f<<"a= "<<a<<"\n";
                        f<<"b= "<<b<<"\n";
                        if (clEllipse1.isCircle()==1) f<<"Эллипс является окружностью"<<"\n"; else f<<"Эллипс не является окружностью"<<"\n";
                        cout<<"Информация записана"<<endl;
                        system("pause");
                        break;
                   }
            case 4:u=1;
        }
        }
        while(u==0);
 
    system("pause");
    return 0;
}
Добавлено через 10 минут
Цитата Сообщение от zss Посмотреть сообщение
Ellips clEllipse1(&clPoint,a,b);
...
Ellipse clEllipse2(&clPoint,a,b);
float dist=clEllipse1-clEllipse2;


Создал второй объект но не могу вызвать перезагрузку, не работает

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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
#include "stdafx.h"
#include <math.h>
#include "iostream"
#include "windows.h"
#include <fstream>
#include <sstream>
 
 
using namespace std;
 
// Создать класс Point, что имеет элементы:
class Point
{
    // поле «координат X» float X;
    float X;
    // поле «координат Y» float Y;
    float Y;
 
public:
 
    // метод установки координат void SetCoordinate(float X, float Y);
    void SetCoordinate ( float pX , float pY )
    {
        X = pX;
        Y = pY;
    }
 
    // метод получения координат X float Get();
    float GetX()
    {
        return X;
    }
 
    // метод получения координат Y float Get();
    float GetY()
    {
        return Y;
    }
 
    // Конструктор без параметров Point();
    Point()
        : X(0.f)
        , Y(0.f)
    {       
    }
 
};
 
 
class Ellips
{
    // поле «центр» Point* Center
    Point* Center;
    // поле «малый радиус» float a;
    float a;
    // поле «большой радиус» float b;
    float b;
 
public:
    Ellips(Point* pCenter, float pA, float pB);
    // метод получения малого радиуса float Get_a();
    float Get_a()
    {
        return a;
    }
 
    // метод получения большого радиуса float Get_b();
    float Get_b()
    {
        return b;
    }
 
    // метод проверки, является ли эллипс окружностью int isCircle();
    int isCircle()
    {
        return a == b;
    }
 
 
    Point GetCenter() 
    
    {
        return *this->Center;
    }
 
     
    // перезагрузить оператор - (бинарний, дружественный оператор), новое действие – вернуть расстояние между центрами Элипсов.
     friend float operator-(Ellips pEllipse1, Ellips pEllipse2)
    {
        float result = pow(pEllipse2.Center->GetX() - pEllipse1.Center->GetX(), 2);
        result += pow(pEllipse2.Center->GetY() - pEllipse1.Center->GetY(), 2);
        result = sqrt(result);
        return result;
    }
 
};
    // конструктор с параметрами Ellipse(Point* Center, float a, float b);
Ellips::Ellips(Point* pCenter, float pA, float pB)
    {
        this->Center=pCenter;
        this->a=pA;
        this->b=pB;
    }
 
 
int main(int argc, char* argv[])
{               
                ofstream f ("../kr.txt", ios::trunc);
                SetConsoleCP(1251);        //рус. яз
                SetConsoleOutputCP(1251);  //рус. яз
                cout<<"                                  Курсовая работа                                "<<endl;
                float X, Y, A, B, a,b,x,y;
                int i,u=0;
                cout << "Введите х, y, а, b для 2х эллипсов"<<endl;
                cout << "Х: ";     cin >> X;
                cout <<endl<< "У: ";    cin >> Y;
                cout <<endl<< "A: ";  cin >> A;
                cout <<endl<< "B: ";  cin >> B;
                cout <<endl<< "x: ";     cin >> x;
                cout <<endl<< "y: ";    cin >> y;
                cout <<endl<< "a: ";  cin >> a;
                cout <<endl<< "b: ";  cin >> b;
                Point clPoint1; // объявление объекта
                Ellips clEllipse1(&clPoint1,A,B);
                Point clPoint2; // объявление объекта
                Ellips clEllipse2(&clPoint2,a,b);
 
 
 
 
                
 
        do {
        system("cls");
        cout<<"                                  Курсовая работа                             "<<endl;
        cout<<"Выбирите нужную вам операцию"<<endl<<"1 - Вызвать поля класса"<<endl<<"2 - Вызвать методы"<<endl<<"3 - записать данные в файл"<<endl<<"4 - Выход"<<endl;
        cin>>i;
        system("cls");
        switch ( i )
        {
        
        
            case 1:{
                    cout<<"                Эллипс 1               "<<endl;
                    clPoint1.SetCoordinate(X,Y); // инициализация точек в классе
                    cout<<endl<<"Метод получения X и Y"<<endl;
                    cout<<"X= "<<clPoint1.GetX()<<endl;// инициализация точки X и вывод
                    cout<<"Y= "<<clPoint1.GetY()<<endl;// инициализация точки Y и вывод
                    cout<<"Радиус A="<<clEllipse1.Get_a()<<endl;
                    cout<<"Радиус B="<<clEllipse1.Get_b()<<endl;
 
                    cout<<"                Эллипс 2               "<<endl;
 
                    clPoint2.SetCoordinate(x,y); // инициализация точек в классе
                    cout<<endl<<"Метод получения x и y"<<endl;
                    cout<<"x= "<<clPoint2.GetX()<<endl;// инициализация точки X и вывод
                    cout<<"y= "<<clPoint2.GetY()<<endl;// инициализация точки Y и вывод
                    cout<<"Радиус a="<<clEllipse2.Get_a()<<endl;
                    cout<<"Радиус b="<<clEllipse2.Get_b()<<endl;
                    system("pause");
                    break;
                   }
            case 2:{
                    float dist=clEllipse1-clEllipse2;
                    if (clEllipse1.isCircle()==1) cout<<"Эллипс является окружностью"<<endl; else cout<<"Эллипс не является окружностью"<<endl; //проверка, если а и b равны то выводит 1
 
                    //cout << clEllipse.GetCenter()<<endl;
                    system("pause");
                    break;
                   }
 
            
            case 3:{
                        ofstream f ("../kr.txt", ios::trunc);
                        f<<"X= "<<X<<"\n";
                        f<<"Y= "<<Y<<"\n";
                        f<<"a= "<<a<<"\n";
                        f<<"b= "<<b<<"\n";
                        if (clEllipse1.isCircle()==1) f<<"Эллипс является окружностью"<<"\n"; else f<<"Эллипс не является окружностью"<<"\n";
                        cout<<"Информация записана"<<endl;
                        system("pause");
                        break;
                   }
            case 4:u=1;
        }
        }
        while(u==0);
 
    system("pause");
    return 0;
}
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
02.06.2015, 09:04 4
Ваш код компилируется и operator- прекрасно вызывается.
Что не так?

Добавлено через 2 секунды
Ваш код компилируется и operator- прекрасно вызывается.
Что не так?
0
02.06.2015, 09:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2015, 09:04
Помогаю со студенческими работами здесь

Шаблон класса и перегруженного оператора отказываются дружить
Всем привет! Помогите разобраться с шаблонами, не получается подружить шаблон класса и шаблон...

Ошибка при вызове в switch перегруженного оператора
есть перегруженный оператор: std::istream&amp; operator&gt;&gt;(istream&amp; is, diagram&amp; dd) { string kod;...

После работы перегруженного оператора происходит удаление списка
// ConsoleApplication6.cpp: определяет точку входа для консольного приложения. // #include...

Синтаксическая ошибка при определении метода перегруженного оператора,за классом
Есть два класса. Point1 и Pointer1 Синтаксическая Ошибка в Pointer1.cpp в перегрузке операторов....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru