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

Добавить конструктор - C++

Восстановить пароль Регистрация
 
Sunkar
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 33
09.02.2013, 00:14     Добавить конструктор #1
Поле first - дробное число, координта х точки на полкости; поле second - дробное число, координта точки у на плоскости. Реализовать метод distance() - расстояние точки от начала координат.

Решил вот эту задачу, но преподаватель говорит, чтоб я решил эту задачу добавив конструктор и деструктор. Тему с конструкторами не особо понял, не понял их предназначения. Можете помочь хотя бы советами, куда конструкторы впихнуть?

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
#pragma hdrstop
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
 
class rasst {
float first;
float second;
public:
 
void init(float F, float S) {first=F; second=S;};
 
void read()
{cout<<"X: ";cin>>first;
cout<<"Y: ";cin>>second;
cout<<"\n";//
}
 
void display()
{cout<<"X= "<<first<< "\n"<<"Y= "<<second<< "\n";};
 
float distance()
{float dst;
dst=sqrt(first*first+second*second);
return dst;}
} ;
 
main(void) {
class rasst a;
a.init(8, 6);
a.display();
cout<<"Rasstoyanie= "<<a.distance();
cout<<"\n";
a.read();
cout<<"Rasstoyanie= "<<a.distance();
getchar();
getchar();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.02.2013, 03:00     Добавить конструктор #2
ммм...
собстна добавить конструктор - легко, деструктор ещё легче ибо вы память ни под что не выделяете...

но давайте я малясь исправлю ваш класс:

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
#include <stdio.h>
#include <iostream>
#include <cmath>
using namespace std;
 
class rasst
{
    double first;
    double second;
 
public:
 
    rasst (double F=0,double S=0) {first=F; second=S;};
    ~rasst () {};
    void setX (double X) { this->first = X;}
    void setY (double Y) { this->second = Y;}
    double getX () { return this->first;}
    double getY () { return this->second;}
    double getR () { return sqrt(first*first+second*second);}
};
 
void read(rasst& a)
{
    double p;
    cout<<"X: ";cin>>p;
    a.setX(p);
    cout<<"Y: ";cin>>p;
    a.setY(p);
    cout<<"\n";//
}
 
void display(rasst& a)
{cout<<"X= "<<a.getX() << "\n"<<"Y= "<<a.getY()<< "\n";};
 
 
int main() 
{   
    rasst a(8,6);
    display(a);
    cout<<"Rasstoyanie= "<<a.getR();
    cout<<"\n";
    read(a);
    cout<<"Rasstoyanie= "<<a.getR();
    getchar();
    getchar();
    return 0;
}
rasst (double F=0, double S=0) {first=F; second=S;}; - конструтор
~rasst () {}; - деструктор

ещё... по хорошему стоит перегрузить оператор << для вывода в поток объекта и оператора >> для ввода объекта из потока, а не пользоваться обходными методами get(X/Y) / set(X/Y) в read и display
Sunkar
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 33
09.02.2013, 21:16  [ТС]     Добавить конструктор #3
void setX (double X) { this->first = X;}
void setY (double Y) { this->second = Y;}
Извините за глупый вопрос: но что здесь делает this, что он дает?

void read(rasst& a)
и этот момент: зачем амперсанд?
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
09.02.2013, 21:51     Добавить конструктор #4
Цитата Сообщение от Sunkar Посмотреть сообщение
Извините за глупый вопрос: но что здесь делает this, что он дает?
здесь он ничего не даёт, это я просто по привычке пишу так, чтобы не запутаться, можете его убрать, его полезно применять, но здесь он лишняя обуза, т.к. при обращении к данным класса неявно ставиться this->



и этот момент: зачем амперсанд?
без & при вызове функции у вас создадутся временные локальные переменные, туда скопируются значения аргументов функции, а потом уже работа будет происходить с копией этих объектов, по выходу из функции они будут уничтожены, а сам объект не изменится и все наши попытки прочитать с клавиатуры и задать поля объекта - коту под хвост...
чтобы этого не происходило мы просим компилятор орудовать со ссылкой на объект - передав в функцию разыменованный указатель на объект... тогда не будут создаваться временные копии, а работать он будет с самим объектом на прямую
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
09.02.2013, 21:53     Добавить конструктор #5
Цитата Сообщение от Sunkar Посмотреть сообщение
Извините за глупый вопрос: но что здесь делает this, что он дает?
this - указатель на текущий объект класса/структуры. В принципе служит для того чтобы уметь указатель на самого себя. Из викиучебника: Так как метод всегда зовется для какого-то объекта, ему всегда передается адрес этого объекта. Этот указатель доступен в теле метода как ключевое слово this.

Цитата Сообщение от Sunkar Посмотреть сообщение
и этот момент: зачем амперсанд?
если передать без амперсанта, передастца копия обьекта - затратится память лишняя
Sunkar
1 / 1 / 0
Регистрация: 03.04.2012
Сообщений: 33
10.02.2013, 16:46  [ТС]     Добавить конструктор #6
И последний вопрос: что делает этот конструктор? какова его роль?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2013, 16:03     Добавить конструктор
Еще ссылки по теме:

Классы (объединить мой класс с проверкой на его работу, убрать гото и добавить конструктор копирования) C++
Подскажите пожалуйста как добавить конструктор копирования в готовую программу C++
C++ Добавить в программу конструктор копирования

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

Или воспользуйтесь поиском по форуму:
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
15.02.2013, 16:03     Добавить конструктор #7
Цитата Сообщение от abit Посмотреть сообщение
rasst (double F=0,double S=0) {first=F; second=S;};
Цитата Сообщение от Sunkar Посмотреть сообщение
И последний вопрос: что делает этот конструктор? какова его роль?
Когда инициализируем объект класса rasst c параметрами, то поля этого обьекта first и second сразу уже будут равны 0
Yandex
Объявления
15.02.2013, 16:03     Добавить конструктор
Ответ Создать тему
Опции темы

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