Ключевое слово this. Нужно разьяснение.

hugoboss317
Offline
Зарегистрирован: 21.03.2013

Колдуя вместе со своими тараканами за компом упёрся в ключевое слово "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
}

Почечему в первой не используется и с какой целью истользуется во второй?

gregoryl
Offline
Зарегистрирован: 09.09.2013

хм... по этому поводу можно целую книгу написать.

но в большинстве случаев this можно опустить. this это указатель сам на себя, т.е. используя его вы в явной форме указываете метод какого именно класса вызывать, но в 99% случаев компилятор справится и без вас....

 

toc
Offline
Зарегистрирован: 09.02.2013

this используется для явного обращения к методам или полям экземпляра. Строго не обязательно. Дело вкуса.