The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Перегрузка операторов С++"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"Перегрузка операторов С++"  +/
Сообщение от IvanN (ok) on 23-Мрт-12, 13:28 
Помогите, пожалуйста разобраться с перегрузкой операторов.
Есть класс

class Cl{
prvate:
int counter;
public:
Cl(){
  counter = 0;
};
virtual ~Cl();

}

Хочу чтобы Cl++ увеличивало counter. Как для него перегрузить оператор ++? Что должен возвращать operator++ и какие параметры он должен принимать?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Перегрузка операторов С++"  +/
Сообщение от Andrey Mitrofanov on 23-Мрт-12, 13:56 
> должен возвращать operator++ и какие параметры он должен принимать?

Осспадя!!? http://lmgtfy.com/?q=operator%2B%2B+overload

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Перегрузка операторов С++"  +/
Сообщение от IvanN (ok) on 23-Мрт-12, 14:41 
>> должен возвращать operator++ и какие параметры он должен принимать?
> Осспадя!!? http://lmgtfy.com/?q=operator+++overload

Спасибо, конечно, но я бы наверное не задавал вопрос, если бы понял как это работает =)
Я много чего читал, но просто не могу до конца понять. Не наше ни одного нормального примера.

Cl Cl::operator++(int){
Cl cl = Cl(*this);
cl.counter++;
return cl;
}
Если я правильно понял, должно быть как-то так. Но я не пойму зачем создавать новый инстанс класса? И если нет конструктора копирования его надо создать? Почему нельзя просто

void Сl::operator++(int){
this->counter++;
}

Как это правильно делается?

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Перегрузка операторов С++"  +/
Сообщение от Andrey Mitrofanov on 23-Мрт-12, 15:16 
> Как это правильно делается?

Мне показалось, что в первом сообщении был совсем другой вопрос. У меня странное ощущение, что ответа Вы не получите, потому что вопроса не знаете. Об реализации класса-синглтона на C++ я пожалуй и сам не сдюжу. Но, впрочем, наверняка сейчас подтянутся мастера теоретического языкознания и разрешат затруднение. Ждите.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Перегрузка операторов С++"  +/
Сообщение от IvanN (ok) on 23-Мрт-12, 15:30 
> Как это правильно делается?

Я просто хочу увидеть пример перегрузки этого оператора. Желательно с пояснениями почему делается именно так а не иначе. Ну или ссылку на толковую статью по этому поводу... Под рукой есть издание Страуструпа, но как-то мутно у него написано. Не могу понять до конца...
В одном месте возвращается константная ссылка, в другом инстанс класса...

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

5. "Перегрузка операторов С++"  +/
Сообщение от JohnProfic (ok) on 23-Мрт-12, 19:34 
>> Как это правильно делается?
> Я просто хочу увидеть пример перегрузки этого оператора. Желательно с пояснениями почему
> делается именно так а не иначе. Ну или ссылку на толковую
> статью по этому поводу... Под рукой есть издание Страуструпа, но как-то
> мутно у него написано. Не могу понять до конца...
> В одном месте возвращается константная ссылка, в другом инстанс класса...

Два ключевых слова для изучения: преинкремент и постинкремент.

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Перегрузка операторов С++"  +/
Сообщение от LSTemp (ok) on 27-Апр-12, 22:58 
>[оверквотинг удален]
>  Cl cl = Cl(*this);
>  cl.counter++;
>  return cl;
> }
> Если я правильно понял, должно быть как-то так. Но я не пойму
> зачем создавать новый инстанс класса? И если нет конструктора копирования его
> надо создать? Почему нельзя просто
> void Сl::operator++(int){
>  this->counter++;
> }

твою мать...
тебе что проще будет писать ArrayClass.ItemAdd() или ArrayClass++ например?
ты просто заморочился на другую задачу и не видишь то, что написано в этом коде  - это плохо.

ArrayClass++.BlaBlaBla=5
или
I=ArrayClass.ItemAdd()
I.BlaBlaBla=5

> Как это правильно делается?

лет 100 CPP не трогал, но по старой памяти сдается мне, что твой вариант сработает, если ты просто накручивать счетчик хочешь. но тогда бы это логичней было сделать просто в конструкторе класса - зачем тут перегрузка оператора++ нужна? вот вопрос.


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру