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

Возврат объекта с полями-массивами в функцию - C++

Восстановить пароль Регистрация
 
Dioxis
1 / 1 / 0
Регистрация: 04.03.2009
Сообщений: 83
11.11.2010, 23:04     Возврат объекта с полями-массивами в функцию #1
Есть вот такой код:

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
#include<iostream>
 
using namespace std;
 
const int MAX=9;
 
class Money
{
    int hrn[MAX];
public:
    int &operator [](int n)
    {
        if(n<0 || n>=MAX)
        {
            cout<<"Wrong index!"<<endl;
        }
        return hrn[n];
    }
            Money operator + ( const Money& mon ) const
        {
            Money res = *this;
            for(int i=0;i<MAX;i++)
                res[i]+=mon[i];  //ошибка здесь
            return res;
        }
};
 
int main()
{
    Money Temp,One,Two;
    Temp=One+Two;
    //cout<<Temp[0];
return 0;
}

и вот такая ошибка:


1>c:\users\dioxis\documents\visual studio 2010\projects\project 8\project 8\main.cpp(23): error C2678: бинарный "[": не найден оператор, принимающий левый операнд типа "const Money" (или приемлемое преобразование отсутствует)
Как поправить, буду признателен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
11.11.2010, 23:21     Возврат объекта с полями-массивами в функцию #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        int operator [](int n) const
        {
                if(n<0 || n>=MAX)
                {
                        cout<<"Wrong index!"<<endl;
                }
                return hrn[n];
        }
        int &operator [](int n) 
        {
                if(n<0 || n>=MAX)
                {
                        cout<<"Wrong index!"<<endl;
                }
                return hrn[n];
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 23:23     Возврат объекта с полями-массивами в функцию #3
Исправляется добавлением такой перегрузки в класс.

C++
1
2
3
4
5
6
7
8
        const int& operator [] (int n) const
        {
                if(n<0 || n>=MAX)
                {
                        cout<<"Wrong index!"<<endl;
                }
                return hrn[n];
        }
Опоздал
Dioxis
1 / 1 / 0
Регистрация: 04.03.2009
Сообщений: 83
11.11.2010, 23:35  [ТС]     Возврат объекта с полями-массивами в функцию #4
Спасибо, работает. но в чем принципиальное отличие этого:

C++
1
int operator [](int n) const
от этого?

C++
1
int &operator [](int n)
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 23:39     Возврат объекта с полями-массивами в функцию #5
Dioxis, Первый работает с константными данными.
Второй с неконстантными.
besstiaa
 Аватар для besstiaa
93 / 93 / 7
Регистрация: 04.06.2010
Сообщений: 223
11.11.2010, 23:40     Возврат объекта с полями-массивами в функцию #6
Dioxis,один для чтения. другой для записи)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2010, 18:41     Возврат объекта с полями-массивами в функцию
Еще ссылки по теме:

C++ Возврат моего объекта List из функции
Создание объекта в функции и возврат объекта из нее C++
C++ Виртуальная функция и возврат объекта класса

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

Или воспользуйтесь поиском по форуму:
Dioxis
1 / 1 / 0
Регистрация: 04.03.2009
Сообщений: 83
16.11.2010, 18:41  [ТС]     Возврат объекта с полями-массивами в функцию #7
Вообщем, товарищи программисты столкнулся с очередной проблемой. Допусти у нас есть 2 объекта. для которых надо перегрузить операцию бинарного "-". Но при этом сталкиваемся со следующей проблемой:

Если у второго поля количество купюр номиналом "500" равно 10, а у первого количество этих же купюр равно 7, то придется для отнимания взять еще 2 купюры из поля номиналом 200 гривен и одно из поля номиналом 100 гривен. Как это элегантно реализовать. буду благодарен за любую помощь
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#include <iostream>
#include <process.h>
 
using namespace std;
 
const int MAX=9;
 
class Money
{
        unsigned int hrn[MAX];
        int elem[MAX];
        unsigned int sum;
public:
    Money():sum(0)
    {
        for(int i=0;i<MAX;i++)
            hrn[i]=0;
        elem[0]=1;
        elem[1]=2;
        elem[2]=5;
        elem[3]=10;
        elem[4]=20;
        elem[5]=50;
        elem[6]=100;
        elem[7]=200;
        elem[8]=500;    
    }
    unsigned int &operator [](int n) 
        {
                if(n<0 || n>=MAX)
                {
                        cout<<"Wrong index!"<<endl;
                }
                return hrn[n];
        }
 
            Money operator + (Money mon )
        {
            Money res = *this;
            for(int i=0;i<MAX;i++)
                res[i]+=mon[i];
            return res;
        }
 
        Money operator - (Money mon)
        {
            Money res = *this;
            if(res.sum<mon.sum)
            {
                cout<<"Second Sum Higher. Can't minus ";
                exit(1);
            }
            else
            {
                for(int i=0;i<MAX;i++)     //Здеся надо думать(
                    res[i]-=mon[i];
            return res;
            }
        }
            bool operator < (Money& mon )
        {
            Money res = *this;
            return(res.sum<mon.sum)?true:false;
        }
//****************************************************************
            void Edit()
            {
                int ch;
                cout<<"Choose the way you want to edit: "<<endl
                    <<"1 - One By One (Press '9') to exit"<<endl
                    <<"2 - Selected Element (Press '9') to exit"<<endl;
                cin>>ch;
                if(ch==1)
                {
                    for(int i=0;i<MAX;i++)
                    {
                    cout<<"Enter quant of element "<<elem[i]<<" : ";
                    cin>>hrn[i];
                    }
                }
            }
            int CalcSum()
            {
                int TempSum=0;
                int CellSum=0;
 
                for(int i=0;i<MAX;i++)
                {       
                    TempSum+=(hrn[i]*elem[i]);
                }
                return TempSum;
            }
};
 
int main()
{
    int ch;
    Money Temp,One,Two;
    One.Edit();
    Two.Edit();
    Temp=One+Two;
    cout<<"Sum: ";
    //cout<<Temp[0];
    cin>>ch;
 
    return 0;
}
Добавлено через 21 час 43 минуты
Вверх!
Yandex
Объявления
16.11.2010, 18:41     Возврат объекта с полями-массивами в функцию
Ответ Создать тему
Опции темы

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