Zacznijmy od tego że funkcja wewnątrz klasy nazywana jest metodą, zaś zmienna wewnątrz klasy to pole lub atrybut. Zasadniczo atrybuty maja przechowywać stan obiektu zaś metody pozwalać modyfikować stan czyli wartości pól.
Konstruktor to specjalna metoda która w przypadku języka C++ nazywa się tak samo jak klasa oraz nie zwraca żadnych argumentów. Metoda ta jest wywoływana w momencie tworzenia obiektu. Jej zadaniem jest przygotowanie obiektu do życia. To właśnie w konstruktorze przypisujemy wartości polom, rezerwujemy pamięć itp. Metoda działającą odwrotnie do konstruktora jest destruktor. Metoda która nazywa się tak samo jak klasa tylko przed nazwą jest znak tyldy (~). Metoda ta jest wywoływana w momencie niszczenia obiektu. Zadaniem jej jest posprzątanie po obiekcie. Jeśli w konstruktorze rezerwowaliśmy pamięć lub otwieraliśmy plik to powinniśmy zwolnić te zasoby w destruktorze.
Jeśli nie napiszemy w ciele klasy ani konstruktora ani destruktora kompilator i tak je doda. Należy zapamiętać że destruktor może być tylko jeden zaś konstruktorów wiele. Konstruktory można przeciążać, inaczej mówiąc tworzyć konstruktory różniące się liczbą argumentów lub ich typem.
Zasadniczo wyróżniamy konstruktor domyślny moja_klasa(). Konstruktor taki nie ma argumentów, konstruktor argumentowy moja_klasa(int a) oraz konstruktor kopiujący. W standardzie C++ 11 został dodany konstruktor przenoszący.
Przykład:
#include <iostream>
using namespace std;
class mojaKlasa
{
public:
mojaKlasa()
{
cout<<"Konstruktor"<<endl;
}
~mojaKlasa()
{
cout<<"Destruktor"<<endl;
}
};
int main() {
mojaKlasa A;
return 0;
}
Zwróć uwagę że ja tylko w main tworzę obiekt, zarówno konstruktor jak i destruktor same się wywołują. Ja ich nigdzie nie wywołuje.
Jeśli chodzi o this to zasadniczo jest to wskaźnik na konkretny obiekt tej klasy. To coś takiego że będąc w pudełku, widział bym co jest na zewnątrz, widział bym samego siebie. Używa się tego głownie wtedy kiedy jakaś nazwa się pokrywa. Przykład:
#include <iostream>
using namespace std;
class mojaKlasa
{
public:
int a;
mojaKlasa(int a)
{
this->a=a;//parametr konsturktora
//ma ta sama nazwe co pole
cout<<"Konstruktor"<<endl;
}
~mojaKlasa()
{
cout<<"Destruktor"<<endl;
}
};
int main() {
mojaKlasa A(5);
return 0;
}
Należy pamiętać że this to wskaźnik dlatego używamy -> a nie operatora kropki. Kolejnym przykładem użycia this jest przypadek kiedy chcemy przekazać obiekt jako całość tak jak pisze @Oscar.
Ze swojej strony polecam Ci lekturę dwóch książek:
https://helion.pl/ksiazki/myslenie-obiektowe-w-programowaniu-wydanie-v-matt-weisfeld,myobp5.htm#format/d
https://helion.pl/ksiazki/c-w-24-godziny-wydanie-vi-rogers-cadenhead-jesse-liberty,cpp246.htm#format/d