Poleciłbym ci poradnik Xiona. Baardzo stary, także zdecydowanie odradzam uczenia się z tamtąd samego rozwiązywania problemów. Znajdziesz też tam kilka rzeczy dawno przestarzałych typu słowo kluczowe register. Mimo wszystko większość z tego, to zaawansowane i wykańczająco opisane podstawy obiektowości i innych ciekawych i bardzo przydatnych jak np. wskaźnki na funkcje/metody (teraz już mamy słowo kluczowe auto, wyrażenia lambda i std::function z ktorych pomocą mozna bardzo uprościć działania na wskaźnikach na funkcje; anyway - dowiesz się o co właściwie chodzi).
Link: http://xion.org.pl/productions/texts/coding/megatutorial/ Wszystko ładnie pogrupowane, więc zacznij od momentu, w ktorym zaczynasz się zastanawiać o co chodzi :D Koniecznie jednak zajrzyj do Wskaźników i Zaawansowanej obiektowości.
Co do twoich pytań... wiem, że nie oczekujesz odpowiedzi, ale to nie są skomplikowane rzeczy, a po co masz czekać.
explicit - po angielsku oznacza "jawny" i to dość dobrze określa do czego służy. Konstrukto z jednym argumentem jest tzw. konstruktorem konwertującym, a konkretnie: może służyć do konwersji z typu <typ argumentu> na typ klasy o której konstruktorze mówimy. Także jeśli jakaś funkcja przyjmuje jako argument obiekt klasy w której zdefiniowałeś konstruktor konwerujący z typu int, to móglbyś do funkcji podać int, a niejawnie (za twoimi plecami, nic ci o tym nie mówiąc) odbędzie się konwersja z inta na obiekt klasy.
class Klasa
{
Klasa(int a){...}
};
void funkcja(Klasa klasa){...}
//wywołanie funkcji:
funkcja(5);
//w rzeczywistości stanie się to:
funkcja(Klasa(5));
Słowo explicit przy deklaracji konstruktora nie pozwala na niejawne konwersje i wywołanie funkcja(5) nie przejdzie. Musisz wtedy napisać funkcja(Klasa(5));
O virtual nie będę ci nic pisał, bo to podstawa obiektowości i będziesz zmuszony się o tym dowiedzieć bardzo niedługo. A na ten temat mozna pisać zdecydowanie za dużo jak na jeden post...
Co do const w argumencie metody/funkcji. Oznacza, to że przekazany do funkcji obiekt nie będzie zmieniany. Tyle. Bynajmniej nie oznacza to, że do funkcji możesz dostarczać tylko zmienne zadeklarowane jako stałe! Btw. jest taka zasada: wszystko co może byc const musi być const :D Stosowanie się do niej ma też jakiś wpływ na możliwości optymalizacji kodu przez kompilator.
Const w deklaracji metody: jest swego rodzaju umowa, że metoda, która została obdarzona takim słówkiem zaraz po nawiasie z listą argumentów (lub bez) nie będzie nic zmieniać w klasie (najlepszy przykład: gettery).
W konstruktorze nie ma wskaźnika tylko referencja. Jeśli funkcja przyjmuje argument przez referencje, to działając na argumencie - działasz faktycznie na tej samej zmiennej którą przekazałeś, nie tylko na jej wartości. Znaczy to też tyle, że nic tu nie kopiujemy, dlatego duże obiekty warto przekazywać, jeśli jest taka możliwość, przez refrencje - oszczędzamy na czasie kopiowania.
Skąd ten update() - nie mam pojęcia. Albo to nie jest cały kod, albo to tylko poglądowy pseduo-kod, a update miał coś znaczyć.
Co do nauki jescze raz. Najłatwiej jest po prostu zacząć pisać i na bierząco uczyć się tego, co jest ci potrzebne (oczywiście nie wiesz co to jest, po prostu szukasz rozwiązań problemu). Bardzo dobrym sposobem jest tez czytanie forów, nawet niekoniecznie udzielanie się, takich jak to czy StackOverflow (tam pewnie znajdziesz więcej bardziej zaawansowanych problemów). Książki typowo papierowej żadnej ci nie polece, bo sam żadnej nie czytałem. Już pomijam, że tak samo jak poradnik Xiona książki szybko stają się nieaktualne także nie mają nad nim żadnej wyższości (jeśli chodzi o wartość merytoryczną, inna sprawa, że dla wielu są wygodniejsze). Najbardziej wartościowym źródlem wiedzy są stosunkowo młode posty na forach :D