Archief - [PROG]C++ Doel van de this pointer

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Evil_Freaky_BE

Legacy Member
Dus momenteel bezig met C++ volledig aan te leren.

Ik zit nu midden ergens in mijn boek aan Pointers voor gevorderden en brengt de this pointer terzaken.

Het is moeilijk te begrijpen voor mij sinds, het voorbeeld dat in mijn boek staat werkt even goed als je hem nu wel of niet plaats.

Zou iemand mij duidelijk kunnen omschrijven met een voorbeeld waar een this pointer goed van toepassing is en waar het echt nodig is (dus als het er niet zou zijn datgene niet zou werken).

Dank aan diegene die het even voor mij kan ophelderen. :doh:

wlibaers

Legacy Member
Een typisch gebruik is bijvoorbeeld als een functie die geen menber is het adres van de class nodig heeft.

Evil_Freaky_BE

Legacy Member
Hier is dus het voorbeeld van mijn boek en snap het nog steeds niet:

Code:
#include <iostream>
using namespace std;

class Rectangle
{
public:
	Rectangle();
	~Rectangle();
	void SetLength(int length) { this->itsLength = length; }
	int GetLength() const { return this->itsLength; }

	void SetWidth(int width) { itsWidth = width; }
	int GetWidth() const { return itsWidth; }
private:
	int itsLength;
	int itsWidth;
};

Rectangle::Rectangle()
{
	itsWidth = 5;
	itsLength = 10;
}

Rectangle::~Rectangle()
{}

int main()
{
	Rectangle theRect;
	cout << "theRect is " << theRect.GetLength() << " feet long.\n";
	cout << "theRect is " << theRect.GetWidth() << " feet wide.\n";
	theRect.SetLength(20);
	theRect.SetWidth(10);
	cout << "theRect is " << theRect.GetLength() << " feet long.\n";
	cout << "theRect is " << theRect.GetWidth() << " feet wide.\n";
	return 0;
}

killgore

Legacy Member
Je weet hoe pointers werken?

Wel, this is een pointer die gewoon het adres van jouw object bevat.

Dus, opgelet: this werkt niet op de klasse maar op het object.

Een beter voorbeeld mssch is een structuur die handig kan uitkomen bij bepaalde systemen (bv. io) en chaining noemt ;):

Code:
class Output
{
    ...
    Output& writeLine(String arg)
    {
        ...
        return *this;
    }
    ...
};

gebruik:
Code:
outputObject.writeLine("lijn1").writeLine("Lijn2");

Evil_Freaky_BE

Legacy Member
Bedankt voor de hulp, heeft het zeker verduidelijkt, snap het nu eindelijk :).

BuiZe

Legacy Member
In dezelfde trant als het voorbeeld van killgore, worden die ook hoofdzakelijk gebruikt bij operatormethodes van een klasse: operator++() operator+=() etc.

Counter& operator++() { n++; return *this; } //prefix
Counter operator++(int) { Counter c = *this; n++; return c; } //postfix

killgore

Legacy Member
BuiZe zei:
In dezelfde trant als het voorbeeld van killgore, worden die ook hoofdzakelijk gebruikt bij operatormethodes van een klasse: operator++() operator+=() etc.

Counter& operator++() { n++; return *this; } //prefix
Counter operator++(int) { Counter c = *this; n++; return c; } //postfix

Yup, dit is eigenlijk de meest gebruikte vorm van chaining binnen c++ die ik tegenkom, maar ik vond dat vb. iets te ingewikkeld en het writen wordt ook vaak zo gedaan :).
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan