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

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

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

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

01.02.2010, 22:09. Просмотров 698. Ответов 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;
Это разве создание объекта?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2010, 22:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод за типом класса (C++):

Как передать в метод класса Menu указатель на метод дочернего класса? - C++
Как передать в метод базового класса указатель на метод дочернего: class Menu() { protected: setCallback(*********); //...

Определение вектора с типом локального класса не работает - C++
#include &lt;iostream&gt; #include &lt;vector&gt; class c1 { int code; }; int main() {

Русский язык в консоли, класс, вектор с типом класса - C++
Добрый вечер. Написала класс. Сделала вектор с типом класса. Вектор хранит объекты класса. Добавляю в вектор элементы....

Как создать гетер для члена класса с типом bool? - C++
Всем привет!!! У меня есть класс и его экземпляр NameDialog dialogNameFile, созданный в классе GuiInteraction. В функциях класса...

Как описать метод класса? Как двумя способами описать инлайнируемый метод класса? Что такое this? - C++
Раздел 1. Строки: нужен фрагмент кода. Обязательно используйте функции для работы со строками. Как найти адрес последнего символа строки?...

Создать для класса виртуальный метод, возвращающий уникальный идентификатор класса - C++
В курсаче по ООП сказано создать для класса виртуальный метод,возвращающий уникальный идентификатор класса. Вопрос в том, что это такое?

11
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);
Это разве создание объекта?
Да внутри функции.
1
insideone
Модератор
Автор FAQ
3642 / 921 / 50
Регистрация: 10.01.2010
Сообщений: 2,477
01.02.2010, 22:39 #3
C++
1
dist3 = dist1.add_dist(dist2);
метод объекта dist1 возвращает новую дистанцию видимо, как она переделывается не важно. В общем на основе dist1 и dist2 получаем новый объект такого же типа в виде копии. В данном месте копируем его в dist3

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

Может ли метод родительского класса обратиться к полю дочернего класса - C++
Может ли метод родительского класса обратиться к полю дочернего класса?

Как в методе класса вызвать другой метод того же класса? - C++
class mate { public: int AplusB(int A, int B) { return A+B; } int AplusBplusC(int A, int B, int C)

Чем отличается шаблонный метод класса от шаблонного класса? - C++
Чем отличается шаблонный метод класса от шаблонного класса???????ПЛИЗ!!!!Если можно немного ссылок на летературу

Может ли метод класса возвращать экземпляр этого же класса? - C++
такой вопрос, реально что бы функция класса имела тип класса(возвращала класс), то есть типа так: class c1{ c1 f1(); } если да, то...


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

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

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