• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jaką książkę polecacie do nauki programowania obiektowego c++?

Object Storage Arubacloud
+1 głos
1,024 wizyt
pytanie zadane 5 grudnia 2015 w Rozwój zawodowy, nauka, praca przez sofnir Gaduła (4,690 p.)

Hej, piszę do Was z prośbą o pomoc i dobrą radę :) Ostatnio trochę utknąłem jeśli chodzi o mój rozwój w zakresie programowania. Myślę, że znam już dobrze podstawy z c++, znam również podstawy programowania obiektowego (przynajmniej w teorii). Jakiś czas temu acząłem bawić się z biblioteką SFML, ale idzie mi to dosyć opornie, myślę, że wynika to z braków w mojej wiedzy. Potrafię już napisać jakąś prostą aplikację/grę ale mam problem z przejściem na język obiektowy. Mam trudność ze zrobieniem większego projektu, który będzie poukładany i napisany obiektowo. Próbowałem napisać własną klasę - przycisk, bo często go używam i nie potrafiłem. Zobaczyłem sobie jak może wyglądać przykładowa własna klasa. Poniżej zamieszczony kod ze strony szymonsiarkiewicz.pl

class EllipseShape : public sf::Shape
{
public :

	explicit EllipseShape(const sf::Vector2f& radius = sf::Vector2f(0, 0)) :
	m_radius(radius)
	{
		update();
	}

	void setRadius(const sf::Vector2f& radius)
	{
		m_radius = radius;
		update();
	}

	const sf::Vector2f& getRadius() const
	{
		return m_radius;
	}

	virtual unsigned int getPointCount() const
	{
		return 30;
	}

	virtual sf::Vector2f getPoint(unsigned int index) const
	{
		static const float pi = 3.141592654f;

		float angle = index * 2 * pi / getPointCount() - pi / 2;
		float x = std::cos(angle) * m_radius.x;
		float y = std::sin(angle) * m_radius.y;

		return sf::Vector2f(m_radius.x + x, m_radius.y + y);
	}

private :

	sf::Vector2f m_radius;
};

Jest tutaj sporo rzeczy, których nie rozumiem :) Explicit, virtual, nie wiem dlaczego pojawia się tutaj const,  dlaczego w konstruktorze jest wskaźnik, na czym polegają te metody stałe (nie jestem pewnien czy tak to się nazywa), skąd nagle jakieś update, skąd ten index itp. Sporo pytań, ale nie oczekuję odpowiedzi, chciałbym żebyście polecili mi jakaś książkę, z której mogę się douczyć brakującej wiedzy, bo to jest mega demotywujące jak się czegoś nie rozumie i miota się po internecie, żeby znaleźć odpowiedź na jakieś pytanie. Próbowałem z kursu cpp0x, ale tam ta obiektówka jest bardzo oszczędnie opisana, nawet nie ma zadań do poćwiczenia i ciężko mi to zrozumieć. 

Jeśli moglibyście mi coś polecić to byłoby super, jest sporo książek, ale nie chciałbym kupić takiej, w której będzie połowa rzeczy, które już umiem :)  Wszelkie słowa otuchy mile widziane, bo nie chcę się poddawać! :)

3 odpowiedzi

+1 głos
odpowiedź 5 grudnia 2015 przez criss Mędrzec (172,590 p.)

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).
Linkhttp://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

+1 głos
odpowiedź 5 grudnia 2015 przez francus11 Gaduła (3,250 p.)
Polecam ci Język C++ Szkoła programowania. Jest ona bardzo obszerna i przekazuje wiedzę w sposób zrozumiały nawet dla początkujących. Są w niej też postawy c++ więc mógłbyś także powtórzyć te etapy. Dodam, że sam się z niej uczę i jak na razie wszystko rozumiem i przyswajam
0 głosów
odpowiedź 5 grudnia 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)

Jerzy Grębosz Symfonia C++ pierwszy tom jest napisany o klasach
O funkcjach wirtualnych (słówko virtual) będzie w drugim tomie.

Aby zabronić używania konstruktora do wykonywania niejawnych konwersji, 
należy zadeklarować konstruktor jako jawny (ang. explicit)

Resztę sobie wyszukaj jak Cię to męczy ;)

komentarz 5 grudnia 2015 przez sofnir Gaduła (4,690 p.)
Właśnie, często jak znajduję takie definicje to ich nie rozumiem, w tym wypadku nie wiem co to znaczy "niejawnych konwersji", jestem typem osoby, która, jak czegoś nie poczuje na własnej skórze to nigdy nie zrozumie, choćby to było coś bardzo łatwego :D Ale chyba większość osób tak ma :) Pamiętam jak kiedyś na matematyce uczyliśmy się co to jest sinus i cosinus. Każdy potrafił wskazać na narysowanym trójkącie, że to jest stosunek "tego boku, do tego", a jak nauczycielka zapytała jaka jest definicja słowa sinus, to nikt nie potrafił odpowiedzieć ^^
komentarz 5 grudnia 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
Bo ludzie mimo że mówią w jednym języku inaczej odczuwają wszystko.
Ja jestem wzrokowcem muszę sobie sinusa np z falami wodnymi skojarzyć
Z twojej wypowiedzi wynika że ty jesteś "kinestetykiem" ty siunsa musisz sobie skojarzyć jakbyś leżał na pontonie i fale by nim machały raz góra raz dół
Są jeszcze słuchowcy którym musiałbyś to albo poprostu skojarzyć z jakimiś dźwiękiem :)

Co do niejawnej konwersji to chodzi o to że ty jako programista tego jawnie nie definiujesz ale jednak takie cos się wykonuje. :)
komentarz 5 grudnia 2015 przez sofnir Gaduła (4,690 p.)
Chyba masz rację, że jestem kinestetykiem, jak się czegoś uczę na pamięć, to chodzę po domu, jak piję herbatę, albo jem kanapki to też cały czas chodzę i myślę o czymś. Często sobie kopię piłkę gumową w pokoju i chodzę z nią w kółko i o czymś myślę i potrafię tak robić bardzo długo :D Może wiesz jaki tym osobowości do mnie pasuje?
komentarz 5 grudnia 2015 przez Mikrokontroler xD Stary wyjadacz (13,500 p.)
A co ja wróżka :D

Jednak kinestetycy są znacznie częściej ekstrawertyczni ale wiadomo że nic nie jest tylko białe lub tylko czarne. Ja w dużym stopniu jestem introwertykiem co nie oznacza że nie lubię wyjścia ze znojomymi :).
komentarz 5 grudnia 2015 przez sofnir Gaduła (4,690 p.)
No widzisz, a ja jestem introwertykiem :D

Podobne pytania

+4 głosów
1 odpowiedź 961 wizyt
pytanie zadane 26 lutego 2016 w Offtop przez Pixel040 Gaduła (3,100 p.)
0 głosów
1 odpowiedź 946 wizyt
pytanie zadane 13 października 2016 w Java przez DxKKxD Użytkownik (560 p.)
+1 głos
2 odpowiedzi 896 wizyt
pytanie zadane 29 stycznia 2016 w C i C++ przez Pixel040 Gaduła (3,100 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...