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

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

Войти
Регистрация
Восстановить пароль
 
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
#1

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

01.02.2010, 22:09. Просмотров 637. Ответов 11
Метки нет (Все метки)

Объясните вот эту строку:
Код
	   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;
Это разве создание объекта?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2010, 22:09     Метод за типом класса
Посмотрите здесь:

C++ Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this?
В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! C++
C++ Может ли метод класса возвращать экземпляр этого же класса?
C++ Русский язык в консоли, класс, вектор с типом класса
C++ Как передать в метод класса Menu указатель на метод дочернего класса?
Может ли метод родительского класса обратиться к полю дочернего класса C++
C++ В чем разница между типом функции и типом возвращаемого значения?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
3634 / 912 / 48
Регистрация: 10.01.2010
Сообщений: 2,457
01.02.2010, 22:39     Метод за типом класса #3
C++
1
dist3 = dist1.add_dist(dist2);
метод объекта dist1 возвращает новую дистанцию видимо, как она переделывается не важно. В общем на основе dist1 и dist2 получаем новый объект такого же типа в виде копии. В данном месте копируем его в dist3

C++
1
Distance temp;
конечно... в C++ все так.
Имя_класса имя_переменной;
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
01.02.2010, 23:20     Метод за типом класса #4
если объект методом не меняется всё же лучше не делать его копию а передавать константную ссылку.
Syltan
181 / 7 / 0
Регистрация: 27.08.2009
Сообщений: 868
01.02.2010, 23:58  [ТС]     Метод за типом класса #5
Не скажите, прототип конструтора - это как?
Ещё, прототип метода - это заголов метода описанный выше?
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
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
Вы не скажете ,какой смысл в языке С++, объявлять внутри класса метод за типом класса, что даёт метод который возвращает объект класса?
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
02.02.2010, 00:41     Метод за типом класса #8
Syltan, ну допустим у нас класс представляет собой дробь с полями - числитель и знаменатель
то есть в методе будет происходить сложение 2 дробей и результатом возвращаться объект - результат.
но в сам метод мыв будем передавать только 1 объект так как один объект по определению будет являться текущим.
insideone
Модератор
Автор FAQ
 Аватар для insideone
3634 / 912 / 48
Регистрация: 10.01.2010
Сообщений: 2,457
02.02.2010, 00:44     Метод за типом класса #9
Кстати может в таком случае стоит перегрузить operator+ ? Не стоит избегать этой темы) Операторы очень весело и познавательно перегружать
Андрейка
419 / 223 / 27
Регистрация: 25.03.2009
Сообщений: 744
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++
Как в классе А у объекта класса B вызвать метод класса B ? C++
Как создать гетер для члена класса с типом bool? C++
C++ Чем отличается шаблонный метод класса от шаблонного класса?

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

Или воспользуйтесь поиском по форуму:
insideone
Модератор
Автор FAQ
 Аватар для insideone
3634 / 912 / 48
Регистрация: 10.01.2010
Сообщений: 2,457
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     Метод за типом класса
Ответ Создать тему
Опции темы

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