Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

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

20.05.2012, 21:20. Просмотров 316. Ответов 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
//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.

поэтому и не компилиться... еще раз приношу свои извинения
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2012, 21:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачка на explicit (C++):

неоднозначность, explicit - C++
Добрый вечер. написал такой шаблонный класс: template &lt;class T&gt; class Container { private: ...... public: ...

Explicit в конструкторе - C++
Ключевое слово explicit перед конструктором служит лишь для того чтобы не запутаться и передавать аргумент в конструктор явно? Например: ...

explicit и последствия. - C++
Здравствуйте. Как я узнал, в С++ есть ключевое слово explicit, применяемое к конструкторам с одним параметром ( или, как я понял, большим...

inline explicit - C++
Почему ошибка? #include &lt;iostream&gt; class A { int i; public: explicit A(int x = 0); void show() {std::cout &lt;&lt; &quot;i = &quot;...

Когда писать explicit - C++
Зачем нужен explicit разобрался. Но, возник вопрос: зачем его писать? когда Вы его пишете? вроде я как-то обходился без него

Explicit и его назначение - C++
Собственно, полазив по гуглу и по учебнику так и не понял всей сущности explicit. Как я понял: class lessons { int intVar; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2012, 21:20
Привет! Вот еще темы с ответами:

Целевой explicit конструктор - C++
Добрый день. Есть код struct Foo { explicit Foo() { }

explicit конструктор и перегрузки в классе - C++
class Test { public: Test () { printf(&quot;Simple constructor\n&quot;); } Test (long) {...

При потсроении пишет что конструктор либо недоступен либо объявлен как explicit - C++
/*Все обьекты содержимые в контейнерах без проблем выводятся через потоковые итераторы и алгоритм copy. Но когда речь идет о собственных...

задачка с++ - C++
#include &lt;iostream&gt; using namespace std; int main() { int a;int i,j,z,y; cout&lt;&lt;&quot;vvedite el-tu massiva:&quot;; ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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