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

Задачка на explicit - C++

Восстановить пароль Регистрация
 
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
20.05.2012, 21:20     Задачка на explicit #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
//Point.h
#ifndef POINT_H
#define POINT_H
#include <iostream>
#include <string>
 
using std::ostream;
 
class Point 
{
private:
    double x; 
    double y;
 
public:
    
        // defualt constructors and constructors 
 
    Point();
    Point(double xval, double yval);
    Point (double xnew);
    virtual ~Point()
    {}; 
 
    
    
 
    //  modificators
void    X (double xval); 
void    Y (double yval);
double X();
double Y(); 
 
    // other method 
    void ToString();    
};
 
#endif
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
//main.cpp
 
#include "Point.h"
#include <iostream>
#include <string>
#include <stdio.h>
 
using namespace std; 
 
int main ()
{
 
    double x1, y1,x2 , y2;
        //;
 
cout << "input X and for first point : " <<endl; 
cout << "X :" ;
cin >> x1 ;
cout <<  endl; 
cout << "Y :" ;
cin >> y1;
 
cout << "input X and for second point : " <<endl; 
cout << "X :" ;
cin >> x2 ;
cout <<  endl; 
cout << "Y :" ;
cin >> y2;
 
 
Point spo1(0,0);
Point spo2(0,0);
 
Point p(1.0,1.0);
 
Point p(1.0, 1.0);
if (p==1.0) cout<<"Equal!"<<endl;
else cout<<"Not equal"<<endl;
 
 
 
 //x2 = 511;
 spo1.X(x1);
 spo1.Y(y1);
 spo2.X(y2);
 spo2.Y(x2);
 
 
 
 
spo1.ToString();
spo2.ToString();
 
cout << "now will be magic "  << endl;
 
 
 
cout << endl;
system ("pause");
 
}
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
//Point.cpp
 
#include "Point.h"
#include <iostream>
#include <string>
#include <stdio.h>
 
using namespace std; 
 
Point::Point():x(0),y(0)
    {
    };
 
Point::Point(double xval, double yval)
    {
    x = xval; 
    y = yval;
    };  
 
Point::Point(double xnew, double ynew )
    {
    x = xnew; 
    y = ynew;
    };  
 
void Point::X(double xval)
{
    x = xval ; 
}
 
void Point::Y(double yval)
{
    y = yval;
}
 
double Point::X()
{
 
    return x; 
}
 
double Point::Y()
{
    return y; 
}
 
 
 
void Point::ToString()
{
    cout << "(" << X() << "," << Y() << ")" << endl;
}
Условие:
Exercise 3: Constructors as conversion operator

In this exercise we are going to do a little experiment. First add to the Point class a constructor that accepts one double as an argument. The implementation should set both the x- and y-coordinate to this value.

Next try the following code in the test program:
Code (cpp):
Point p(1.0, 1.0);
if (p==1.0) cout<<"Equal!"<<endl;
else cout<<"Not equal"<<endl;
Will this code compile and can you explain why?

It turns out that the Point constructor with the single double argument is implicitly used to convert the number in the if statement to a Point object. Thus constructors are used as implicit conversion operators.

To prevent the usage of constructors are implicit conversion operators, declare the constructor as explicit:
explicit Point(double value);

Now try to compile the program again and you will see that now the if statement gives a compiler error. You can still use the constructor as conversion operator but then explicitly:
if (p==(Point)1.0) cout<<"Equal!"<<endl;


Вообщем проблема у меня в том, что в задаче подразумевается что
после добавление этой строки
C++
1
2
3
Point p(1.0, 1.0);
if (p==1.0) cout<<"Equal!"<<endl;
else cout<<"Not equal"<<endl;
все будет нормально компелитсья в начале, а у меня компелятор ругается на (p==1.0) мож надо какую библиотеку добавить ? Помогите, пожалуйста, заранее спасибо большое!
фигурные скопку на cout не помогают пробовал...

Добавлено через 9 минут
извиняюсь все я нашел там по заданию из предыдущего примера мне надо было внедрить
bool operator == (const Point& p) const; // Equally compare operator.

поэтому и не компилиться... еще раз приношу свои извинения
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 21:20     Задачка на explicit
Посмотрите здесь:

C++ неоднозначность, explicit
explicit и последствия. C++
inline explicit C++
Когда писать explicit C++
Целевой explicit конструктор C++
explicit конструктор и перегрузки в классе C++
C++ При потсроении пишет что конструктор либо недоступен либо объявлен как explicit
C++ Explicit и его назначение

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

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

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