URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9418
[ Назад ]

Исходное сообщение
"Перегрузка операторов С++"

Отправлено IvanN , 23-Мрт-12 13:28 
Помогите, пожалуйста разобраться с перегрузкой операторов.
Есть класс

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

}

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


Содержание

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

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


"Перегрузка операторов С++"
Отправлено IvanN , 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++;
}

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


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

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


"Перегрузка операторов С++"
Отправлено IvanN , 23-Мрт-12 15:30 
> Как это правильно делается?

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


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

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


"Перегрузка операторов С++"
Отправлено LSTemp , 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 не трогал, но по старой памяти сдается мне, что твой вариант сработает, если ты просто накручивать счетчик хочешь. но тогда бы это логичней было сделать просто в конструкторе класса - зачем тут перегрузка оператора++ нужна? вот вопрос.