Posty

Wyświetlanie postów z 2017

Klasy, Przestrzenie nazw, Nonlocal, Global i Local. Czy Python ma zmienne prywatne ?

Cześć! Fajnie Cię widzieć. Dzisiaj zajmiemy się tematem klas. Python jest językiem obiektowym, nie zawierającym w sobie jednak niektórych elementów, które zawierają inne języki. Nie posiada zmiennych typu prywatnych, chronionych. I Nie. Nie jest prawdą, że zapis __ sprawia, że pole staje się superprivate.  W Pythonie nie ma sensu komplikować sobie życia modyfikatorami dostępu. Ale o tym może później. Jak wygląda składnia klasy ? class nazwa():  ...statements... Klasa to przepis jak zrobić dany obiekt. Przepis to jednak jeszcze nie wykonanie, dlatego musimy coś w środku umieścić po czym stworzyć obiekt, który będzie już miał określone cechy. W Pythonie wygląda to podobnie jak w C++. Jest jednak kilka różnic. Zanim to zrobimy, zróbmy coś lubicie, czyli zajmiemy się przykładem class MyClass(): def name_space(value): def show(): nonlocal value value = value + 1 return value show() print(value) return value for i in range(3): x = MyCla

Python import modułów

Często się zdarza, że potrzebujemy w programie rozbić coś na mniejsze części. Znacznie prościej skupić się na mniejszej rzeczy, niż na całym programie od razu. Poza tym, znacznie lepiej jest później zarządzać takim kodem. Wyszukanie błędów, w programie napisanym w jednym pliku zajmującym 1000 linii kodu jest trudniejsze niż w 100 liniach, a które wiemy że są powiązane z danym błędem. Ten post może być również użyteczny dla osób piszących w C++, gdyż podział na pliki występuje również w C++. W tym języku używa się do tego celu instrukcji #include i załącza potrzebne pliki. Jeśli są w tej samej lokalizacji piszemy po prostu jej nazwę w cudzysłowiu. W pythonie występuje coś podobnego z dodatkowymi zabezpieczeniami. Przed wieloma dodawaniami, które są w C++ zmorą, a które tutaj są importowane po prostu raz, żeby uniknąć wielokrotnego dodawania. Nosi to nazwę moduł. Moduł to pojedyńczy plik zawierający dane, które Nas interesują na podany przez Nas temat. Dla przykładu można podać wyszu

Python podstawy

Cześć! Dzisiaj zajmiemy się czymś nietypowym. Nie będzie to nic z C++, a języka Python. Języka, który robi się coraz popularniejszy, z uwagi na jego prostotę. Z racji tego, że w poprzednich postach, zwykle lubiliście przykłady, zamiast suchej definicji, wytłumaczymy sobie podstawowe składnie pythona na przykładzie. Wypisanie na ekranie słowa Hello World, wymaga w C++ takiego czegoś: #include <iostream> int main(){ std::cout<<"Hello World!\n"; } W pythonie wystarczy napisać: print("Hello World!") I to bez żadnych znaczników nowej lini. Python zrobi to za Nas. Jak napisać kilka różnych danych w tej samej lini ? print("Hello","Word","!") W tym języku nie musimy również używać średników. Dodatkowo w C++ apostrofy oznaczały pojedyńczy znak. Natomiast w Pythonie oznaczają one to samo co ciąg znaków w C++. Czyli można powiedzieć, że apostrof jest równy cudzysłowom. Z uwagi na to, że znacznie c

Przeciążanie operatorów w C++

Cześć! Fajnie, że jesteś. Czym jest przeciążanie operatorów ? To możliwość użycia operatora w sposób niestandardowy w celu osiągnięcia zakładnego rezultatu. Na wstępie warto wspomnieć, że operatory nie rozwiązują żadnych problemów. Są one używane, w celu zapisania czegoś skomplikowanego w sposób prosty. Jakie wyróżniamy operatory ? Lista możliwych przeciążeń operatorów jest dosyć długa, dlatego najlepiej podlinkować ich listę: Lista operatorów możliwych i nie do przeciążenia Od czego zaczniemy Nasze rozważania ? Rozpoczynamy od operatora przypisania, o którym wspominałem w poprzednim poście. Więc wyjaśnijmy to sobie. Operator przypisania jest przeciążonym operator znaku równości, czyli = . Co on robi ? Głównym celem jest przypisanie zmiennych jednego obiektu, do drugiego. Jednocześnie warto zauważyć, że nie koniecznie musimy robić to co Nam karze operator przeciążenia i równie dobrze możemy wypisać tam sekretne wyznanie. A teraz do rzeczy. Jak to przeciążyć

Konstruktory w języku C++. Szczegółowa analiza krok po kroku

Cześć! Zgodnie z obietnicą z poprzedniego postu, dzisiaj zajmiemy się konstruktorami. Operatorem przypisania(którego efekt działania jest podobny do konstruktora kopiującego) zajmiemy się innym razem. Od czego należy zacząć ? Od definicji. Jest to specjalna metoda w ciele klasy, wywoływana na samym początku istnienia obiektu. Na razie wystarczy definicji. Teraz wyjaśnijmy sobie jej znaczenia. Jak widać konstruktor będzie dosyć podobny do zwykłych metod. Ma on jedną tą różnicę że wywołuje się na samym początku istnienia instancji klasy(czyli obiektu). Jak wygląda zapis ? #include <iostream> class MyClass { public: MyClass() { std::cout<<"To ja konstruktor.\n"; } }; int main(){ MyClass myClass; } I oto mamy Nasz konstruktor. No w sumie fajnie, ale po co mi konstruktor ? Konstruktor wywołuje się na samym początku istnienia obiektu, przez co jest możliwe zainicjowanie zmiennych w klasie bez narażenia się na ich odczyt, gdy jeszcze nie i

Przyjaźnienie klas i atrybut private

Cześć! Na początku wyjaśnimy definicje. Czym jest przyjaźnienie klas ? Jest to możliwość ujrzenia prywatnych danych przez inną klasę. Co ważne, to klasa definiuje kto jest jej przyjacielem, a nie bezpośrednio klasa, która korzysta z tych dobrodziejstw korzysta. Atrybut private - Coś prywatnego, zastrzeżonego tylko dla wybranych. W tym konkretnym przykładzie będą to atrybuty prywatne klasy. Po co to ? Prywatne znaczy nie dostępnego dla każdego. Nie zawsze chcemy dzielić informacje między wszystkie dostępne klasy. Wiąże się z tym zasada nie udostępniania informacji, których nie potrzebują. Listonosz, który przynosi Nam pocztę powinien wiedzieć gdzie mieszkamy, ale nie koniecznie musi wiedzieć, jakim samochodem jeździmy. Oczywiście jeśli nie jest to Fiat Multipia. Jak to wykorzystać w programowaniu obiektowym ? #include <iostream> struct Set; struct MyStruct { private: int value=0; void setValue(int v) { value = v; } public: void showValue() { std::cout&l

Programowanie obiektowe w C++. Cz. 2 Atrybuty: Public i protected.

Cześć! Dzisiaj zajmiemy się tak jak jest wspomniane w tytule atrybutami public i protected klasy. Czym one są? Public- Coś publicznego, dostępnego dla klasy. Klasa udostępnia swoje dane każdemu kto chce. Protected - Klasa ma metody, lub zmienne częściowo chronione przed odczytem lub modyfikacją. Mogą odczytać tylko klasy dziedziczące. Przykład: class MyClass { public: void showValue(int value) { std::cout<<value<<'\n'; } }myClass;///Dzięki temu że jest średnik można definiować obiekt bezpośrednio po nawiasach int main() { myClass.showValue(10); } W przeciwieństwie do poprzedniej lekcji, wystarczyło dodać atrybut public, by zadziałało. Jak można pokazac atrybut protected w akcji? class MyClass { protected: void show() { std::cout<<"Hello! It's MyClass\n"; } }; class SecondClass:public MyClass { public: void showInBaseClass() { this->show();} }; int main() { SecondClass sec; sec.showInBas

Programowanie obiektowe w języku C++.Cz.1 Klasy oraz struktury

Cześć! Dzisiaj zajmiemy się programowaniem obiektowym. Rozszyfrujmy na samym początku znaczenie tego sformułowania. Programowanie obiektowe - Programujemy w sposób obiektowy. Czyli używając obiektów. Czym jest obiekt? Jest to reprezentacja szczegółowa klasy lub struktury. Zobaczmy na prosty przykład class MyClass ///Przyjęło się nazywać nazwy klas z dużej litery { };///Średnik na końcu jest związany z bezpośrednim tworzeniem obiektu klasy. Ale o tym później int main() { MyClass myClass;///Obiekt } Jak widzimy obiekt to reprezentacja klasy lub struktury(Zamiast class możemy wstawić struct. Zadziała w ten sam sposób). Wróćmy do klasy. Pojawia się pytanie: Po co mi klasa ? Do definiowania w jej wnętrzu metod(funkcji w klasie), oraz zamiennych. Dlaczego klasa lub struktura, a nie porozrzucane po całym programie ? Ta kwestia jest złożona. Pierwszym powodem dla którego warto stosować klasę jest porządek, ale to subiektywna kwestia. Najważniejszym jest to, że progr

Wskaźniki w C++ cz.2

Cześć! Dzisiaj zajmiemy się drugą część wskaźników i związaną z Nią alokacją pamięci. Wyobraźmy sobie, że mamy tablicę o rozmiarze 4. I chcielibyśmy mieć tablicę o rozmiarze 5. Co w pierwszej chwili przychodzi Nam do głowy ? Alokacja na nowo. To nie jest jednak najlepszy pomysł, gdyż zobaczmy poniższy kod: int *myTable = new int [4]; for(int i=0;i<4;i++) myTable[i]=i; for(int i=0;i<4;i++) std::cout<<myTable[i]<<" "; std::cout<<'\n'; myTable = new int [5];//Alokuje na nowo for(int i=0;i<4;i++) std::cout<<myTable[i]<<" "; std::cout<<'\n'; Powyższy kod daje Nam jasno do zrozumienia, że spowoduje to utracenie danych w tablicy. Co więc powinniśmy zrobić? Tutaj sprawa nie jest taka prosta. Możemy włożyć tablicę myTable to innej tablicy. I potem skopiować ją do tej pierwszej. Zobaczmy to w akcji: int *myTable = new int [4]; int * secondTable = new int [4]; for(int i=0;i<4;i++) myTable[i]=

Wskaźniki w C++ cz1

Cześć! Dzisiaj zajmiemy się rzeczą bardzo ważną i fundamentalną w rozwoju informatyki. Zajmiemy się wskaźnikami. Czym jest wskaźnik ? Wskaźnik to zmienna która, zawiera w sobie adres innej zmiennej. Pokażmy to na przykładzie: int * myPointer; int variable; myPointer = &variable; Co w tym momencie zrobiliśmy ? Przypisaliśmy do zmiennej myPointer adres zmiennej variable. Adres oznaczany jest &(ampersandem). Pojawia się teraz pytanie po co Nam adres ? Otóż do kilku ważnych rzeczy. Po pierwsze szybkość. Komputer wiedząc gdzie ma się udać zrobi coś szybciej, niż przeszukując bit po bicie. Po co jeszcze ? By  za-alokować dynamicznie pamięć. Brzmi groźnie. W istocie sprowadza się do tego, że jeśli chcemy mieć pamięć dynamiczną, czyli taką którą możemy usunąć, gdy nie jest Nam potrzebna lub coś do Niej dodać(co jest kłopotliwe). Dlaczego potrzebuje do tego wskaźników ? Wskaźnik zawiera adres i komputer dzięki temu adresowi wie gdzie będzie zawierać się dynamiczna tabli

Tablice w języku C++

Cześć! Dzisiaj zajmiemy się tablicami. Tablica to uporządkowany, znajdujący się w pamięci obok siebie, zestaw danych. Zestawem danych może być cokolwiek. Może to być liczba, string, lub inny typ danych. To co odróżnia tablicę od innych struktur, to jej uporządkowanie w pamięci obok siebie. Pamięć to zestaw rekordów, z których każdy ma swój adres. Czym jest adres ? Adres to (zazwyczaj) liczba, która jest unikalna dla całej pamięci i wskazuje, że chodzi nam o ten konkretny adres. Dla przykładu: Adres:  1      2             3 Dane:   35    79    "Ala ma kota" To jest właśnie takie przyporządkowanie do adresu, odpowiadającym im danych. Jak to się ma do tablic. O ile w przypadku innych danych, lub zmiennych, mogą(zwykle nie są, w pojedyńczym programie) być one porozrzucane po całej pamięci. Tak w przypadku tablic, są one obok siebie. Teraz: Jaki jest cel, żeby stały one obok siebie ? Jest wiele. Zaczynijmy od przykładu z życia.Wyobraźmy sobie, że mamy pokój wypełniony książ

Klasa String w C++. Obszerna analiza

Cześć! Jak przygoda z programowaniem ? Mam nadzieję, że całkiem ciekawie. Dzisiaj zajmiemy się tematem dla jednych ciekawym, a dla innych jeszcze bardziej ciekawym. Zainteresowany ? Zapraszam. String, co to takiego ? Klasa string jest połączeniem tablicą charów. Czym jest "char"? To pojedyńczy znak, który wewnątrz siebie jest liczbą(może być zarówno dodatnią, jak i ujemną), która reprezentuje znaki w standardzie UTF8. Tablica String jest tablicą ciągłą, to oznacza że znajduje się nieprzerwanie w pamięci od początku, aż do końca. Element pierwszy ma indeks zerowy. Ostatni indeks ma zawsze znacznik '\0'. Dlaczego ? String jest tablicą ciągłą i kompilator musi wiedzieć gdzie się kończy. Jak wygląda deklaracja string w c++? std::string myString; W ten sposób. Napiszmy więc związany z Nim najprostszy kod. #include <iostream> #include <string>///Library for String int main() { std::string myString = "Ala ma kota, ale nie Filemona";

Funkcje oraz typy danych w języku C++. Szczegółowa analiza

Cześć! Dzisiaj zajmiemy się tzw. funkcjami. W matematyce funkcja to coś wykonujące czynność. W programowaniu jest podobnie. Może zanim przejdziemy do głębszego zastanowienia się po co Nam funkcje, zobaczmy na kod. Jak to mawiał Linus Torvalds, talk is cheap. Show me the code. So. Do this. #include <iostream> void showHelloWorld() { std::cout<<"Witaj, Swiecie!"<<'\n'; } int main() { showHelloWorld(); } Skompilujmy to. Wychodzi na to, że Nasz kod generuje identyczny wynik, jak w poprzednim tekście. Wywołanie showHelloWorld następuje w mainie. Czyli od pierwszego miejsca wykonywania danych. Tam właśnie zaczyna się wykonywać Nasz program. Co tym razem jest w mainie ?   showHelloWorld(); Co to oznacza ? Odniesienie się do funkcji o takim imieniu. Poszukajmy w Naszym programie czegoś, co tak się nazywa. Znajdujemy takie cudo: void showHelloWorld() { std::cout<<"Witaj, Swiecie!"<&

Co dokładnie oznacza std::cout<<"Witaj Swiecie!"<<'\n''; w C++ ?

Cześć! W poprzednim poście zajmowaliśmy się napisanie i skompilowaniem prostego projektu. Jeśli uważanie czytałeś, wiesz już nie tylko jak to napisać, ale także co dokładnie robiliśmy. Teraz następuje więc pora na wytłumaczenie kodu. Przepiszmy go jeszcze raz i wytłumaczmy linijka po linijce. #include <iostream> int main() { std::cout<<"Witaj Swiecie!"<<'\n''; } Zacznijmy od linijki pierwszej. #include <iostream> Co to jest ? Instrukcja preprocesora. Spokojnie, to nie takie trudne. Znaczek #oznacza właśnie definicję preprocesora. Czyli coś, co wykonuje się jak sama nazwa mówi przed właściwym wykonaniem programu. Pre- Przed. Więc już wiemy, że wykonuje coś przed. A co znaczy pozostała część ? Słówko include oznacza po angielsku dołącz. Co dołącz ? To co znajduje się w dalszej części instrukcji. Dalej znajdujemy <iostream>. Co to więc oznacza ? Dołączenie biblioteki iostream. Czym jest bibliote

(LINUX)Podstawy Programowania w C++

Cześć! Zwykle ludzie gdy zakładają bloga, piszą kim są. Więc pora i na mnie. Jestem Szymon. Zapraszam Cię w krainę programowania. Od czego dzisiaj zaczniemy ? Od podstaw. Zaczniemy jak wiele poradników od C++. To co będzie odróżniało, to chęć prostego wyjaśnienia jak to działa, oraz dlaczego to działa. Na początku kilka kwestii niezwiązanych z programowaniem, ale na pewno dla Ciebie przydatnych.  Mamy Linuksa. Zanim zasiądziemy do klawiatury, jestem zobowiązany wspomnieć o tym co właściwie będziemy robili. Komputer składa się z części fizycznych. Jest nimi płyta główna, procesor oraz np. pamięć RAM. To co Nas interesuje to procesor. Dlaczego akurat on ? Wykonuje on obliczenia, przetwarza informacje, oraz to co dla Nas jest ważne wykonuje instrukcje. Dlaczego właśnie instrukcje ? Procesor jest elementem elektrycznym, który przetwarza informacje w systemie binarnym, składającym się z zer i jedynek. Czyli prąd płynie, lub nie. I to właśnie procesor zajmuje się przetwa