Archief - [C++] this Vs. [Java] this?

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.

Curahee Q

Legacy Member
Beste 9livers

De this in C++ is een pointer naar zichzelf, in java is this een referentie naar zichzelf. Wat is eigenlijk het verschil tussen beide?

Als ik in java programmeer zet ik voor elke membervariabele het woordje this.
Code:
public class Foo {
         private String foo;

         public Foo(String bar) {
                 this.foo = bar;
         }
}

Ook handig wanneer de parameter in de constructor (of in een methode) dezelfde naam draagt als een membervariabele. Ook zie ik dan meteen in een grotere methode wat mijn membervariabele zijn en wat lokale variabele zijn.

Nu wordt dit bij ons op school ook effectief vermeld in de cursus dat als ze dezelfde naam dragen je toch onderscheidt kunt maken tussen member en localvariabele. Echter wordt dit in C++ niet aangeleerd terwijl het toch gaat.

Beste 9livers

De this in C++ is een pointer naar zichzelf, in java is this een referentie naar zichzelf. Wat is eigenlijk het verschil tussen beide?

Als ik in java programmeer zet ik voor elke membervariabele het woordje this.
Code:
#include <string>

class Foo {
         private:
                 string foo;

         public: 
                 Foo(string bar) {
                          this->foo = bar;
                 }
};
Hier is er echter geen reden tot verwarring omdat ze een ander naam dragen. Als ze dezelfde naam dragen gaat het ook nog.
Code:
#include <string>

class Foo {
         private:
                 string bar

         public: 
                 Foo(string bar) {
                          this->bar = bar;
                 }
};
Echter leren ze het bij ons aan als volgt
Code:
#include <string>

class Foo {
         private:
                 string bar;

         public: 
                 Foo(string bar_) {
                          bar = bar_;
                 }
};
Nu ben ik daar zelf een beetje tegen omdat volgens conventies een naam enkel mag beginnen en eindigen met een letter dus doe ik het altijd als volgt.
Code:
#include <string>

class Foo {
         private:
                 string m_bar;

         public: 
                 Foo(string bar) {
                          m_bar = bar;
                 }
};
Ik laat membervariabele beginnen met een m_ zodat ik ook in C++ het onderscheid snel kan zien.
Maar is er een reden waarom ze in Java wel this gebruiken en in C++ niet? Ook op internet kom ik het nauwelijks tegen.

Alvast bedankt

SharkyXTS

Legacy Member
Curahee Q zei:
Code:
#include <string>

class Foo {
         private:
                 string bar;

         public: 
                 Foo(string bar_) {
                          bar = bar_;
                 }
};
Ben je serieus dat dit hetgene is dat ze je op school aanleren? Normaal doe je namelijk het volgende:

Code:
#include <string>

class Foo {
         private:
                 string bar;

         public: 
                 Foo(string bar_): bar(bar_) {

                 }
};
In dit geval maakt het zelfs niet uit hoe je invoervariabele noemt, C++ begrijpt perfect wat je bedoelt.

Afgezien van een technisch verschil zijn de this uit Java en de this uit C++ hetzelfde.

SavaB

Legacy Member
ik denk dat dit oa een van de grote rederen voor name conventions is?

Curahee Q

Legacy Member
SharkyXTS zei:
Ben je serieus dat dit hetgene is dat ze je op school aanleren?

Ja oké, ze prefereren een initializer list, dit was gewoon een klein voorbeeldje voor de this aan te halen.

NeverwinterX

Legacy Member
Ik denk niet dat er een bepaalde reden is. Gewoon een conventie.

Cycloon

Legacy Member
Zelf in C# en java zijn er bedrijven waar de membervariabelen verplicht starten met een underscore. Zo willen ze meer onderscheid maken tussen lokale- en klassevariabelen. Alles hangt dus vaak af van eigen smaak en hoe je het aangeleerd hebt gekregen.

Curahee Q

Legacy Member
Dus het is niet fout om this-> te gebruiken? Niet dat ik het zal doen in C++ maar gewoon om te weten.

Cycloon

Legacy Member
Natuurlijk is dat niet "fout". Al zou ik het zelf wel afraden omdat het al snel storend wordt om overal this tussen te zien staan.

NeverwinterX

Legacy Member
Mja door het c++ pijltje voor pointer access is dat natuurlijk wat lelijker om te zien altijd. Mogelijk een van de redenen waarom ze dat niet doen :p
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