Nie jestem specem od C++, ale odnośnie samej nauki mogę sporo powiedzieć. Jednak zaczynając od kodu:
(Biorę to na logikę, jak wspomniałem, C++ to nie moja bajka i w tym temacie może ktoś mądrzejszy się wypowie)
Main.h <- trzymasz tam klasę, nie przejrzyściej byłoby nazwać plik nazwą klasy?
Nazwy metod i funkcji zaczynamy z małej litery - z wielkiej zaczynamy nazwę klasy, namespace'ów itp
Nie używaj "using namespace std;" bo przy większych programach pogubisz się. Ktoś po to wymyślił przestrzenie nazw, żeby pomagały. fakt, że masz te 5 znaków więcej do napisania, ale co gdy masz dwie funkcje, które nazywają się tak samo, a jednak są z różnych przestrzeni? Rozważ.
Nazwy zmiennych - "m, n, o" są bardzo wymowne, nie sądzisz? Pewnie musisz zerknąć w kod żeby wiedzieć co to za zmienna i za co odpowiada. To jest błąd, zmienna, a raczej jej nazwa, powinna mówić o sobie jak najwięcej.
Logikę kodu zostawię komuś innemu, ale wydaje się ok :P
Java, C# i C++ to moje ulubione języki programowania.
A programowałeś w Javie i C# skoro wcześniej zadałeś pytanie czy warto ZACZĄĆ się uczyć? Otóż sytuacja wygląda tak - nie ma sensu uczyć się wszystkiego - programista to nie kombajn który zna świetnie 15 języków programowania, wraz z technologiami, które działają dookoła. Wybierz jedną, naucz się jej dobrze i napisz w tym kilka ciekawych projektów, użytecznych co ważne. Nie mówię, żebyś np kontynuował C++, ale nie ciągnij 3 srok za ogon, bo nie zostanie Ci żadna. Biorąc na ten przykład samo C++ - podstawy cpp to mało, możesz się nauczyć Qt, czyli biblioteki do cpp i pisać aplikacje okienkowe, pewnie przyda się jakaś baza danych, sqlite czy coś.
Java to też nie tylko sama Java, ale wszystkie Springi i inne tego typu frameworki.
No i programowanie to nie tylko język i biblioteki/frameworki do niego. To też wzorce projektowe i inne ciekawostki.
BTW doucz się gita ;)
I tak, idzie z tego wyżyć, jeśli jest się w tym dobrym, wcale nie trzeba skończyć studiów informatycznych.