Ключевое слово this. Нужно разьяснение.
- Войдите на сайт для отправки комментариев
Втр, 18/03/2014 - 18:47
Колдуя вместе со своими тараканами за компом упёрся в ключевое слово "this", которое используется вместе с оператором косвенного доступа к функции-члену класса(->). Не хотел Вас тривожить но гугл не очень помог. Подскажите вот на примерах ниже что эта комбинация делает и почему в подобной функции-члене класса они (this->) не применяются.
Допустим библиотека к ЖКИ GLCD имеет функции вывода прямоугольника:
void ks0108::DrawRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t color) { DrawHoriLine(x, y, width, color); // top DrawHoriLine(x, y+height, width, color); // bottom DrawVertLine(x, y, height, color); // left DrawVertLine(x+width, y, height, color); // right }
и вывод того же с закруглённым краями:,
void ks0108::DrawRoundRect(uint8_t x, uint8_t y, uint8_t width, uint8_t height, uint8_t radius, uint8_t color) { int16_t tSwitch, x1 = 0, y1 = radius; tSwitch = 3 - 2 * radius; while (x1 <= y1) { this->SetDot(x+radius - x1, y+radius - y1, color); this->SetDot(x+radius - y1, y+radius - x1, color); this->SetDot(x+width-radius + x1, y+radius - y1, color); this->SetDot(x+width-radius + y1, y+radius - x1, color); this->SetDot(x+width-radius + x1, y+height-radius + y1, color); this->SetDot(x+width-radius + y1, y+height-radius + x1, color); this->SetDot(x+radius - x1, y+height-radius + y1, color); this->SetDot(x+radius - y1, y+height-radius + x1, color); if (tSwitch < 0) { tSwitch += (4 * x1 + 6); } else { tSwitch += (4 * (x1 - y1) + 10); y1--; } x1++; } this->DrawHoriLine(x+radius, y, width-(2*radius), color); // top this->DrawHoriLine(x+radius, y+height, width-(2*radius), color); // bottom this->DrawVertLine(x, y+radius, height-(2*radius), color); // left this->DrawVertLine(x+width, y+radius, height-(2*radius), color); // right }
Почечему в первой не используется и с какой целью истользуется во второй?
хм... по этому поводу можно целую книгу написать.
но в большинстве случаев this можно опустить. this это указатель сам на себя, т.е. используя его вы в явной форме указываете метод какого именно класса вызывать, но в 99% случаев компилятор справится и без вас....
this используется для явного обращения к методам или полям экземпляра. Строго не обязательно. Дело вкуса.