Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

пЕРЕГРУЗКА оПЕРАТОРА

319
17 апреля 2004 года
xelos
577 / / 27.02.2003
что-то не могу сообразить... суббота, наверное, потому что... Исторически было так - была прога, написанная с использованием шаблона массивов из MFC. Теперь переписываю прогу без участия MFC. Однако с массивами надо работать (слава богу массив из целых только используется). Пишу свой класс, позволяющий работать с динамическими массивами - все используемые фукнции реализовал, все работает ок, кроме одной функции. оператора сложения (вычитания) для конкретного члена массива. Класс описан как:

class CVector
{
private:
int* vect;
int size;
public:
void Add(int i);
void RemoveAll(void);
int GetSize(void);
int operator[](int k);
void InsertAt(int position, int element);
void SetAt(int position, int value);
CVector(void);
~CVector(void);
};

массив хранится в int* vect. Осталось реализовать оператор, позволяющий делать
CVector v;
//заполняем v
....
v[k]+=x;
т.е. оператор, позволяющий делать присваивание конкретному элементу массива. Как реализовать такую фичу?
спасибо всем заранее.
4.0K
17 апреля 2004 года
Enygma
34 / / 03.04.2004
Ispolzuj kluchevoe slovo

Class T::operator += (int)

za sintaksis ne otvechaju, msdn bilo zapuskatj uzhe lenivo.
319
17 апреля 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Enygma
Ispolzuj kluchevoe slovo

Class T::operator += (int)

za sintaksis ne otvechaju, msdn bilo zapuskatj uzhe lenivo.


так в том-то и фишка, что если я просто оператор += перегружу, то он будет перегружен для всего массива, а не для конкртеного члена массива, как мне в этом операторе передать индекс элемента k??

3
18 апреля 2004 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by xelos

так в том-то и фишка, что если я просто оператор += перегружу, то он будет перегружен для всего массива, а не для конкртеного члена массива, как мне в этом операторе передать индекс элемента k??



Намекну:
int[COLOR=red]&[/COLOR] operator[](int k);


:)

А чем не подошел std::vector или др. стандартные контейнеры ?

461
18 апреля 2004 года
gerard
102 / / 20.12.1999
Цитата:
Originally posted by xelos

так в том-то и фишка, что если я просто оператор += перегружу, то он будет перегружен для всего массива, а не для конкртеного члена массива, как мне в этом операторе передать индекс элемента k??



На самом деле перегружать += не нужно. Можно использовать v[k]+=x - при условии, что оператор [] перегружен как int& operator[](int k). Тогда его можно ставить и слева и справа от любого оператора присваивания (поскольку он будет возвращать ссылку на элемент массива).

319
19 апреля 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Green


Намекну:
int[COLOR=red]&[/COLOR] operator[](int k);


:)

А чем не подошел std::vector или др. стандартные контейнеры ?



блин, пора на пенсию.... отправил бы тока кто... если возвращаемый тип определен как ссылка, то тогда ведь данная операция определена и как левосторонняя, и как правостороняя....
стандартные контейнеры... не знаю, не пользовался никогда STL, т.к. все что надо было или сам писал или в MFC находил. сейчас вот пытаюсь от MFC отойти... смотрю на wtl, чтобы разобраться как он работает решил пару программ переписать на WinAPI, чтобы вспомнить все то, что в MFC не видно со всеми его перегружаемыми обработчиками.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог