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

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

Войти
Регистрация
Восстановить пароль
 
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
#1

Перегрузка оператора индексации для класса плохо себя ведёт - C++

19.11.2013, 15:28. Просмотров 380. Ответов 6
Метки нет (Все метки)

Собственно, есть такое дело.
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
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
//не-важно-что
class word
{
    public:
        string en_name;
        //no more code yet
};
//не-важно-что
class base
{
    public:
//не-важно-что
        vector <word> _b;
        word get(unsigned int n)
        {
            return _b[n];
        }
//не-важно-что
        word operator [] (unsigned int n)
        {
            return get(n);
        }
};
//не-важно-что
Проблема в том что вот в таком виде оно работает для получения значения элемента в базе, но изменять этот элемент никоим образом не получится. Пытался решить вставкой "&" (как сказано в моём справочнике по ООП)... Ну в общем, не заработало оно. Кто подскажет? Тестил на g++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2013, 15:28
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора индексации для класса плохо себя ведёт (C++):

Перегрузка оператора индексации для связанного списка - C++
Доброго времени суток!:) Требуется перегрузить оператор индексации для связанного списка, я так понимаю в роли списка должны выступать...

Перегрузка оператора индексации [] - C++
Необходимо перегрузить оператор индексации двумя способами, первый я реализовал #pragma once #include &lt;iostream&gt; using namespace...

Перегрузка оператора индексации - C++
class matrix{ double **c; int m;//кол-во строк int n;//кол-во столбцов } - часть кода подскажите, пож-ста, как перегрузить ()...

Перегрузка оператора индексации [] - C++
Имеется некоторый класс почти массив. &quot;Почти&quot; - потому что элементы лежат в памяти не по байтам, а по битам и, соответственно, для...

Перегрузка оператора индексации - C++
Доброго вам времени суток, у меня появилась проблема з перезагузкой оператора индексации (),вот мой код: MyVectorClass.h #include...

Перегрузка оператора индексации - C++
Можно ли зоздать в своем классе перегрузку оператора , но с двойными скобками вроде? int &amp;operator(int m,int n) { /*.....*/}

6
egor2116
342 / 373 / 42
Регистрация: 20.01.2013
Сообщений: 1,132
19.11.2013, 15:52 #2
Надеюсь это поможет

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
#include <iostream>
#include <string>
#include <vector>
 
class base
{
    public:
        std::vector < std::string > _b;
        void push(std::string str) { _b.push_back(str); }
 
        std::string & operator [] (const unsigned int n) 
        { 
             return n < _b.size() ? _b[n] : *(new std::string("none"));
        }
        
        int size() { return _b.size(); }
        
};
 
 
int main(int argc, char *argv[])
{
    base b;
    b.push("Hello");
    b.push("world,");
    b.push("my");
    b.push("world.");
    
    b[2] = "your";
     
    for(int i = 0; i < b.size(); ++i)
        std::cout << b[i] << " ";
        std::cout << std::endl;
    
    system("PAUSE");
    return 0;
}
0
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 2
19.11.2013, 15:55 #3
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
class base
{
 
public:
    word& get(size_t n)
    {
        return _b[n];
    }
 
    word get(size_t n) const
    {
        return _b[n];
    }
 
    word& operator [] (size_t n)
    {
        return get(n);
    }
 
    word operator [] (size_t n) const
    {
        return get(n);
    }
 
private:
    std::vector<word> _b;
Добавлено через 1 минуту
п.с. Постеру сверху советую подумать насчет new
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
19.11.2013, 16:16 #4
stima, а почему константный метод возвращает копию, а не константную ссылку?
0
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
19.11.2013, 16:18  [ТС] #5
Цитата Сообщение от stima Посмотреть сообщение
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
class base
{
 
public:
    word& get(size_t n)
    {
        return _b[n];
    }
 
    word get(size_t n) const
    {
        return _b[n];
    }
 
    word& operator [] (size_t n)
    {
        return get(n);
    }
 
    word operator [] (size_t n) const
    {
        return get(n);
    }
 
private:
    std::vector<word> _b;
Добавлено через 1 минуту
п.с. Постеру сверху советую подумать насчет new
Очень странно. В прошлый раз так же делал - не компилировалось (см. пост 1). Ну да ладно, главное что работает.
0
stima
490 / 342 / 40
Регистрация: 22.03.2011
Сообщений: 1,095
Завершенные тесты: 2
19.11.2013, 16:26 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
stima, а почему константный метод возвращает копию, а не константную ссылку?
Согласен. Подправил

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
class base
{
 
public:
    word& get(size_t n)
    {
        return _b[n];
    }
 
    const word& get(size_t n) const
    {
        return _b[n];
    }
 
    word& operator [] (size_t n)
    {
        return get(n);
    }
 
    const word& operator [] (size_t n) const
    {
        return get(n);
    }
 
private:
    std::vector<word> _b;
};
0
k1-801
4 / 4 / 2
Регистрация: 07.01.2013
Сообщений: 135
19.11.2013, 16:55  [ТС] #7
Некогда код дорезать, вот.
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
#include <iostream>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <set>
#include <math.h>
#include <fstream>
using namespace std;
 
class word
{
    public:
        string en_name;
        //no more code yet
};
 
bool __base_sort_word_comparator(word _f, word _s)
{
    return _f.en_name<_s.en_name;
}
 
class base
{
    public:
        char *base_filename;
        fstream b_file;
        vector <word> _b;
        bool load(char* _b_filename)
        {
            base_filename=_b_filename;
            b_file.open(base_filename);
            if(b_file)
            {
                //here is scanning code;
            }
            return (b_file);
        }
        word& get(unsigned int n)
        {
            return _b[n];
        }
        void clear()
        {
            _b.clear();
            b_file.close();
            return;
        }
        void reload()
        {
            _b.clear();
            return;
        }
        long long size()
        {
            return _b.size();
        }
        void sort()
        {
            std::sort(_b.begin(),_b.end(),__base_sort_word_comparator);
            return;
        }
        void save(char *s_fn)
        {
            ofstream s_file;
            s_file.open(s_fn);
            long long i;
            for(i=0;i<_b.size();i++)
                s_file<<0;
            s_file.close();
            return;
        }
        void save()
        {
            save(base_filename);
            return;
        }
        word& operator [] (unsigned int n)
        {
            return get(n);
        }
};
0
19.11.2013, 16:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 16:55
Привет! Вот еще темы с ответами:

Перегрузка оператора индексации в списке - C++
Доброго времени суток. Имеется список, внутри которого соответственно структура, имеющая элемент данных int и две ссылки вперед/назад ...

Перегрузка оператора индексации и присваивания (C++) - C++
Доброго времени суток уважаемые форумчане. Возникла проблема Допустим у меня есть класс, в котором находится некий массив и нужно...

Перегрузка оператора >> для дочернего класса от базового виртуального класса - C++
Доброго вам времени суток! Программирую на С++ не давно, в связи с отсутствием должного времени на поиск ответа в глубинах учебников,...

Перегрузка оператора индексации в одном классе и использование в другом - C++
Вообщем проблема состоит в том, что не понимаю как это сделать. Есть класс Document в нем есть вектор vec состоящий из Item'ов. В классе...


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

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

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