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

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

Войти
Регистрация
Восстановить пароль
 
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
#1

Аналог перегрузки оператора индексирования (operator []) - C++

28.11.2013, 17:56. Просмотров 349. Ответов 9
Метки нет (Все метки)

Как по-другому(то есть в виде обычной функции или как то ещё) можно записать перегрузку оператора индексирования?
Например в моём случае:

C++
1
2
3
4
5
6
float &operator[] (int num);
 
float &Vector2::operator [] (int num)
{
    return _vector[num];
}
Подскажите пожалуйста!!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2013, 17:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Аналог перегрузки оператора индексирования (operator []) (C++):

Перегрузка оператора индексирования - C++
Всем привет! Ситуация такая - есть 2 класса, поле одного класса является массивом из элементов второго класса. Необходимо переопределить...

Перегрузка оператора индексирования - C++
Что-то не выходит каменный цветок. Определение класса: struct TEventData { char strComputerName; }; class TEventDataSet { ...

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

Перегрузки (operator+) - C++
Прошу помощи не могу понять как сделать реализацию для этого куска Также добавьте operator+ для сложения объекта String с...

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

Целесообразность перегрузки оператора - C++
Изначально имелся такой вот метод (пусть будет методом класса "A"): //класс "A", константная версия метода const Order &operator...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
28.11.2013, 18:04 #2
I_Masha_I, никак, operator [] обязан быть нестатическим методом класса. Можно добавить const перегрузку:
C++
1
2
3
float Vector::operator [](std::size_t const index) const {
   // ...
}
1
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
28.11.2013, 18:27  [ТС] #3
gray_fox, Спасибо!
А подскажите пожалуйста, что делать, если мне надо определить перегрузку оператора индексирования в двух местах программы, но если я это делаю у меня выскакивает ошибка error lnk2005 что этот оператор уже определён.
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
28.11.2013, 18:30 #4
I_Masha_I, определение у метода может быть только одно, вам явно что-то другое нужно.
0
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
28.11.2013, 18:32  [ТС] #5
gray_fox, а что можно использовать вместо этого?
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
28.11.2013, 18:36 #6
I_Masha_I, для чего? Если охота
Цитата Сообщение от I_Masha_I Посмотреть сообщение
определить перегрузку оператора индексирования в двух местах программы
то я уже написал, что так делать нельзя - определение всегда должно быть одно.
0
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
28.11.2013, 18:40  [ТС] #7
gray_fox, я написала как вы советовали:
C++
1
2
3
4
5
6
7
        float operator[] (size_t const num) const;//оператор индексирования
};
 
float Vector2::operator [] ( size_t const num) const
{
    return _vector[num];
}
но ошибка осталась
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
28.11.2013, 18:48 #8
I_Masha_I, понял. 3 варианта:
1. перенести определение в файл с исходным кодом
2. сделать operator [] встроенным (inline)
3. определить operator [] при объявлении в классе, тогда он буден считаться встроенным

Добавлено через 4 минуты
+ несоветую писать идентификаторы, начинающиеся с _ (_vector).
0
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
28.11.2013, 19:05  [ТС] #9
gray_fox, Спасибо, ошибок больше нет, но теперь при загрузке формы(кусок программы который я добавляла это из рисования куба) работает только рисование куба, а после на форме нельзя нажать ни одну кнопку
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
28.11.2013, 19:11 #10
Цитата Сообщение от I_Masha_I Посмотреть сообщение
теперь при загрузке формы(кусок программы который я добавляла это из рисования куба) работает только рисование куба, а после на форме нельзя нажать ни одну кнопку
Это не ко мне.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2013, 19:11
Привет! Вот еще темы с ответами:

Ошибка перегрузки оператора - C++
Здравствуйте уважаемые программисты, при созданиии проэкта возникает ошибка In function 'int main()': 154 10 no 'operator++(int)'...

Friend-функции перегрузки оператора - C++
Всем доброго времени суток =) У меня есть следующий код заголовочного файла: enum month {jan = 1, feb, mar, apr, may, jun, jul, aug, sep,...

Вопрос по поводу перегрузки оператора + - C++
Всем привет.Подскажите как можно перегрузить оператор + в моем классе? И что лучше вернуть из перегруженной операции +=? Объект или...

Ошибка из книги оператора перегрузки - C++
// Листинг 10.10. // Возвращение безымянного временного объекта #include <string> #include <iostream> // для объекта cout using...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.11.2013, 19:11
Ответ Создать тему
Опции темы

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