Помогите, пожалуйста разобраться с перегрузкой операторов.
Есть классclass Cl{
prvate:
int counter;
public:
Cl(){
counter = 0;
};
virtual ~Cl();}
Хочу чтобы Cl++ увеличивало counter. Как для него перегрузить оператор ++? Что должен возвращать operator++ и какие параметры он должен принимать?
> должен возвращать operator++ и какие параметры он должен принимать?Осспадя!!? http://lmgtfy.com/?q=operator%2B%2B+overload
>> должен возвращать 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++;
}Как это правильно делается?
> Как это правильно делается?Мне показалось, что в первом сообщении был совсем другой вопрос. У меня странное ощущение, что ответа Вы не получите, потому что вопроса не знаете. Об реализации класса-синглтона на C++ я пожалуй и сам не сдюжу. Но, впрочем, наверняка сейчас подтянутся мастера теоретического языкознания и разрешат затруднение. Ждите.
> Как это правильно делается?Я просто хочу увидеть пример перегрузки этого оператора. Желательно с пояснениями почему делается именно так а не иначе. Ну или ссылку на толковую статью по этому поводу... Под рукой есть издание Страуструпа, но как-то мутно у него написано. Не могу понять до конца...
В одном месте возвращается константная ссылка, в другом инстанс класса...
>> Как это правильно делается?
> Я просто хочу увидеть пример перегрузки этого оператора. Желательно с пояснениями почему
> делается именно так а не иначе. Ну или ссылку на толковую
> статью по этому поводу... Под рукой есть издание Страуструпа, но как-то
> мутно у него написано. Не могу понять до конца...
> В одном месте возвращается константная ссылка, в другом инстанс класса...Два ключевых слова для изучения: преинкремент и постинкремент.
>[оверквотинг удален]
> 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 не трогал, но по старой памяти сдается мне, что твой вариант сработает, если ты просто накручивать счетчик хочешь. но тогда бы это логичней было сделать просто в конструкторе класса - зачем тут перегрузка оператора++ нужна? вот вопрос.