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

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

Войти
Регистрация
Восстановить пароль
 
 
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
#1

Передача объекта в функцию - C++

21.06.2015, 21:31. Просмотров 750. Ответов 20
Метки нет (Все метки)

подскажите что тут не так у меня?!
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
62
/*
 * 5. Поле first — целое положительное число, часы; 
 * поле second — целое положительное число, минуты. 
 * Реализовать внешнюю функцию сложения двух объектов данного типа. 
 * Результат возвращать в качестве объекта. В реализации функции учесть, 
 * что значение поля минуты может быть только в диапазоне от 0 до 59. 
 */
#include <iostream>
using namespace std;
int init_,error_=0;
 
class vr
{
    private:
    int first;
    int second;
    public:
    vr() {first=0;second=0;}
    int init(int f,int s)
    {
        if ((f>=0) && (f<=23) && (s>=0) && (s<=59)) {first=f; second=s; return 0;}
        else error();
    }
    void read()
    {
        int f,s;
        cin>>f>>s;
        init_=init(f,s);
    }
    void error()
    {
        cout<<"error!";
        error_=1;
    }
    void display()
    {
        if (init_==0)
        cout<<first<<" "<<second;
    }
    
};
vr sum(vr x,vr y)
{
    vr temp;
    temp=x+y;
    temp.display();
}
 
int main()
{
    vr o1,o2;
    cout<<"obj1\n";
    o1.read();
    o1.display();
    if (error_==0)
    {cout<<"\nobj2\n";
    o2.read();
    o2.display();
    sum(o1,o2);
}
    
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2015, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача объекта в функцию (C++):

Передача объекта в функцию или функцию друга - C++
Здравствуйте, уважаемые программисты :) К примеру есть такой код. #include &lt;iostream&gt; using namespace std; class My_Class1 { ...

Передача объекта в функцию - C++
Нужно передать в функцию void Openz(Array &amp;a) { int**buff = a.getarr(); for (int i(0); i &lt; 10; i++) { for (int j(0);...

Передача объекта класса в функцию С++ - C++
Всем привет! Возник вопрос по классам. Допустим мне нужно изменить объект класса через функцию вызываемую в main. Я пробовал через...

Передача объекта в вызывающую функцию - C++
Всем привет! Что-то меня переклинило, помогите. Задача в том, что в функции, вызванной из main(), нужно построить довольно тяжелый объект,...

Передача объекта по указателю в функцию - C++
Здравствуйте. При передаче объекта в метод другого объекта по указателю, метод получает непонятно что. class SomeObj { ...

Классы: передача объекта в функцию - C++
class Distance // длина в английской системе { private: int feet; float inches; public: ...

20
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.06.2015, 21:37 #2
Цитата Сообщение от kirill1904 Посмотреть сообщение
что тут не так у меня?!
Не хватает описания проблемы.
0
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
21.06.2015, 21:39  [ТС] #3
проблема с передачей в функцию, и сложении объектов
0
hoggy
6701 / 2883 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
21.06.2015, 21:40 #4
1.
отсутствует operator+

C++
1
2
3
4
5
6
vr sum(vr x,vr y)
{
    vr temp;
    temp=x+y;  //<--- не умеет складываться
    temp.display();
}

2.
C++
1
2
3
4
5
int init(int f,int s)
    {
        if ((f>=0) && (f<=23) && (s>=0) && (s<=59)) {first=f; second=s; return 0;}
        else error();
    }
функция должна вернуть наружу некий int.

но у вас, если ошибка - ничего не возвращается наружу.
это - UB, обычно в таких случаях возвращается мусор.
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.06.2015, 21:41 #5
Передачей чего? В какую функцию? Каких объектов?
0
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
21.06.2015, 21:42  [ТС] #6
Цитата Сообщение от castaway Посмотреть сообщение
Не хватает описания проблемы.
Цитата Сообщение от castaway Посмотреть сообщение
Не хватает описания проблемы.
проблема со сложением 2х объектов

Добавлено через 1 минуту
Цитата Сообщение от hoggy Посмотреть сообщение
1.
отсутствует operator+

C++
1
2
3
4
5
6
vr sum(vr x,vr y)
{
    vr temp;
    temp=x+y;  //<--- не умеет складываться
    temp.display();
}

2.
C++
1
2
3
4
5
int init(int f,int s)
    {
        if ((f>=0) && (f<=23) && (s>=0) && (s<=59)) {first=f; second=s; return 0;}
        else error();
    }
функция должна вернуть наружу некий int.

но у вас, если ошибка - ничего не возвращается наружу.
это - UB, обычно в таких случаях возвращается мусор.
есть же
C++
1
return ;
подскажи как оператор+ правильно сделать?
нужно сложить поле first одного объекта с полем другого объекта, econd также
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.06.2015, 21:45 #7
Цитата Сообщение от kirill1904 Посмотреть сообщение
проблема со сложением 2х объектов
Цитата Сообщение от castaway Посмотреть сообщение
Каких объектов?
В чем проблема?
0
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
21.06.2015, 21:47  [ТС] #8
в функции main описано два объекта о1 и о2 вот их нужно сложить и записать в 3 объект temp
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.06.2015, 21:57 #9
Цитата Сообщение от kirill1904 Посмотреть сообщение
подскажи как оператор+ правильно сделать?
C++
1
2
3
4
5
6
vr operator + ( const vr & rhs ) {
    vr result;
    result.first = first + rhs.first;
    result.second = second + rhs.second;
    return result;
}
Всё это внутри класса.
1
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
21.06.2015, 21:57  [ТС] #10
Цитата Сообщение от castaway Посмотреть сообщение
В чем проблема?
в функции main описано два объекта о1 и о2 вот их нужно сложить и записать в 3 объект temp
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
21.06.2015, 21:59 #11
Я уже понял.
1
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
21.06.2015, 22:08  [ТС] #12
Цитата Сообщение от castaway Посмотреть сообщение
C++
1
2
3
4
5
6
vr operator + ( const vr & rhs ) {
* * vr result;
* * result.first = first + rhs.first;
* * result.second = second + rhs.second;
* * return result;
}
Всё это внутри класса.
подскажи еще как сделать чтобы при значении поля second=60 first увеличивался на один и оставшееся записвалось в second
например ввел 2 часа и 40 минут в первом объекте, и 1 час 34 минуты в итоге должно получится 4 часа 14 минут
заранее спасибо)
0
hoggy
6701 / 2883 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
21.06.2015, 22:14 #13
Цитата Сообщение от kirill1904 Посмотреть сообщение
есть же
return ;
рассмотрим функцию поподробнее:

C++
1
2
3
4
5
int init(int f,int s)
    {
        if ((f>=0) && (f<=23) && (s>=0) && (s<=59)) {first=f; second=s; return 0;}
        else error();
    }
если выполнится первое условие, тогда сработает return 0;

что будет если оно не выполнится, и сработает ветка else ?
запуститься функция error();
а что будет дальше?

Цитата Сообщение от kirill1904 Посмотреть сообщение
подскажи как оператор+ правильно сделать?
как то так:

http://rextester.com/MNXF51354


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
62
#include <iostream>
 
class vr
{
    int hours;
    int minutes;
public:
    vr(const int h = 0, const int m = 0)
        :hours(h)
        ,minutes(m)
    { normalize(); }
    
    void normalize()
    {
        const auto h = minutes/60;
        hours += h;
        minutes -= h*60;
    }
    
    friend vr operator+(const vr& lhs, const vr& rhs)
    {
        vr result(lhs.hours + rhs.hours, lhs.minutes + rhs.minutes);
        result.normalize();
        return result;
    }
    
    template<class T> 
        friend ::std::basic_ostream<T>& 
    operator<<(::std::basic_ostream<T>& os, const vr& obj)
    {
        return os<<"hours: "<<obj.hours << " : minutes: "<<obj.minutes;
    }
    
    void set(const int h, const int m)
    {
        hours = h;
        minutes = m;
        normalize();
    }
    
};    
 
void read(vr& dst)
{
    int h,m;
    std::cin>>h>>m;
    dst.set(h,m);
}    
    
int main()
{
    vr o1, o2;
    read(o1);
    read(o2);
    
    
    vr o3 = o1 + o2;
    
    std::cout <<"o1: " << o1 << '\n';
    std::cout <<"o2: " << o2 << '\n';
    std::cout <<"o3: " << o3 << '\n';
}
0
kirill1904
0 / 0 / 0
Регистрация: 29.09.2014
Сообщений: 25
21.06.2015, 22:27  [ТС] #14
Цитата Сообщение от hoggy Посмотреть сообщение
если выполнится первое условие, тогда сработает return 0;
что будет если оно не выполнится, и сработает ветка else ?
запуститься функция error();
а что будет дальше?
дальше мне не надо ничего, нужно было только сложить объекты и сделать их как время
0
hoggy
6701 / 2883 / 494
Регистрация: 15.11.2014
Сообщений: 6,480
Завершенные тесты: 1
21.06.2015, 22:32 #15
Цитата Сообщение от kirill1904 Посмотреть сообщение
дальше мне не надо ничего, нужно было только сложить объекты и сделать их как время
дальше у вас будет жЁпа.

то есть, в вашем первоначальном варианте кода вот эта вот функция
может привести к нарушению в логике работы программы,
и последствия будут не предсказуемые.

если вас устраивает жЁпа - хозяин барин.

кстати, гляньте на эту функцию:
C++
1
2
3
4
5
6
vr sum(vr x,vr y)
{
    vr temp;
    temp=x+y;  //<--- не умеет складываться
    temp.display();
}
она должна вернуть наружу результат сложения.
но она так же ничего не возвращает.

то бишь, здесь у вас точно такая же жЁпа.

вместо суммы вы будете получать случайный мусор.

сложили два временных объекта, получили мусор.
нормально чо.
0
21.06.2015, 22:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.06.2015, 22:32
Привет! Вот еще темы с ответами:

Передача функционального объекта в функцию - C++
Здорова! Никак не могу передать функциональный объект в функцию. От примерчик, функция передается нормально, а объект нет. #include...

Присваивание объектов одного типа между собой и передача объекта в функцию по значению - C++
При первом знакомстве с С++ усиленно не могу понять вот такие моменты : 1. Имеем вот такой код : class use_string { char...

Как правильно вызывать функцию объекта из другой функции того же объекта? - C++
Доброго дня и ночи, уважаемые программисты! Существует некоторая проблема, на которую я наткнулся, решая задачу по программированию из...

Передача объекта методу другого объекта другого класса - C++
Всем привет. Есть у меня класс test1, который имеет конструкторы только с параметрами. Другой класс test2 имеет конструктор, который...


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

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

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