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

Метод за типом класса - C++

Восстановить пароль Регистрация
 
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
01.02.2010, 22:09     Метод за типом класса #1
Объясните вот эту строку:
Код
	   dist3 = dist1.add_dist(dist2);
и эту:

Код
Distance Distance::add_dist(Distance d2)
из этого кода:

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
#include <iostream>
#include <iomanip>
using namespace std;
 
class Distance 
{
private:
    int feet;
    float inches;
public:
    Distance():feet(0),inches(0.0) {cout<<"Konstryktorchik"; }
    Distance(int ft, float in):feet(ft),inches(in) {cout<<"\nKonstryktor";}
    void getdist()
    {
        setlocale(0,"");
        cout<<"\nВведите число футов -> ";
        cin>>feet;
        cout<<"Введите число дюймов -> ";
        cin>>inches;
    }
    void showdist()
    { cout<<feet<<setw(15);   cout<<inches; }
    Distance add_dist(Distance); //сложение
};
Distance Distance::add_dist(Distance d2)
{
    Distance temp;
    temp.inches = inches + d2.inches;
    if(temp.inches>=12.0)
    {
        temp.inches-=12.0;
        temp.feet  = 1;
    }
    temp.feet +=feet + d2.feet;
    return temp;
}
 
 
    int main()
    {
 
       Distance dist1, dist3;
       Distance dist2(11,6.25);
       dist1.getdist();
       dist3 = dist1.add_dist(dist2);
       //Вывод всех длин
       cout<<"\ndist1 = "; dist1.showdist();
       cout<<"\ndist2 = "; dist2.showdist();
       cout<<"\ndist3 = "; dist3.showdist();
       cout<<endl;     
       cin.ignore();
       cin.get();
    }
А это:
C++
1
 Distance temp;
Это разве создание объекта?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
 Аватар для Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
01.02.2010, 22:38     Метод за типом класса #2
Distance Distance::add_dist(Distance d2)
первый Distance ето тип возвращ значения второй показывает что ето метод класса Distance
В третия объект заганяется результат метода из вызванного первого объекта
dist3 = dist1.add_dist(dist2);
Это разве создание объекта?
Да внутри функции.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
01.02.2010, 22:39     Метод за типом класса #3
C++
1
dist3 = dist1.add_dist(dist2);
метод объекта dist1 возвращает новую дистанцию видимо, как она переделывается не важно. В общем на основе dist1 и dist2 получаем новый объект такого же типа в виде копии. В данном месте копируем его в dist3

C++
1
Distance temp;
конечно... в C++ все так.
Имя_класса имя_переменной;
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
01.02.2010, 23:20     Метод за типом класса #4
если объект методом не меняется всё же лучше не делать его копию а передавать константную ссылку.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
01.02.2010, 23:58  [ТС]     Метод за типом класса #5
Не скажите, прототип конструтора - это как?
Ещё, прототип метода - это заголов метода описанный выше?
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
02.02.2010, 00:03     Метод за типом класса #6
Syltan,
Distance add_dist(Distance); - прототип метода
Distance(int); - прототип конструктора.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
02.02.2010, 00:30  [ТС]     Метод за типом класса #7
Вы не скажете ,какой смысл в языке С++, объявлять внутри класса метод за типом класса, что даёт метод который возвращает объект класса?
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
02.02.2010, 00:41     Метод за типом класса #8
Syltan, ну допустим у нас класс представляет собой дробь с полями - числитель и знаменатель
то есть в методе будет происходить сложение 2 дробей и результатом возвращаться объект - результат.
но в сам метод мыв будем передавать только 1 объект так как один объект по определению будет являться текущим.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
02.02.2010, 00:44     Метод за типом класса #9
Кстати может в таком случае стоит перегрузить operator+ ? Не стоит избегать этой темы) Операторы очень весело и познавательно перегружать
Андрейка
410 / 214 / 24
Регистрация: 25.03.2009
Сообщений: 716
02.02.2010, 09:54     Метод за типом класса #10
insideone, кстати да, но так как человек пока разбирается с передачей объектов в методы то я думаю он пока что не дочитал про operator+ operator- operator new и т д, впринципе ведь можно и не перегружать, ошибки то не будет но мой вариант в корне нарушит смысл сложения дробей, но пока ему для понимания сойдёт.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
11.02.2010, 18:27  [ТС]     Метод за типом класса #11
Если кто сможет, сделайте этот же код, только с оператором operator+, и скажите, чем с ним лучше.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.02.2010, 02:06     Метод за типом класса
Еще ссылки по теме:

Есть метод класса внутри , есть проверка. Если условие сходится то метод должен выдать указатель, иначе булевую переменную C++
C++ Русский язык в консоли, класс, вектор с типом класса
Может ли метод родительского класса обратиться к полю дочернего класса C++

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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
 Аватар для insideone
3622 / 900 / 47
Регистрация: 10.01.2010
Сообщений: 2,429
12.02.2010, 02:06     Метод за типом класса #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
Distance Distance::operator+(Distance& d2) // по ссылке передавать быстрее
{
        Distance temp;
        temp.inches = inches + d2.inches;
        if(temp.inches>=12.0)
        {
                temp.inches-=12.0;
                temp.feet  = 1;
        }
        temp.feet +=feet + d2.feet;
        return temp;
}
Использование - вместо:
C++
1
2
3
Distance a;
Distance b; // какие то инициализации
Distance c = a.add_dist(b);
так:
C++
1
2
3
Distance a;
Distance b; // какие то инициализации
Distance c = a + b;
Заметьте как упростился код. При этом проглядите измененную функцию - она и не изменилась. В этом и суть operator что оно просто заменяет такие операции
Yandex
Объявления
12.02.2010, 02:06     Метод за типом класса
Ответ Создать тему
Опции темы

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