Skocz do zawartości
1 maja :: Święto Pracy / 2 maja :: Dzień Flagi / 3 maja :: Święto Konstytucji

[#1] Kurs C++ dla każdego


rxt
# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Kontynuować serie?  

32 użytkowników zagłosowało

  1. 1. Kontynuować serie?

    • Tak
      31
    • Nie
      1


Rekomendowane odpowiedzi

Witam!

Na wstępie zaznaczam że kurs będzie z każdą cześćią biegł ku programowaniu czitów jak i Reverse Engineering'u.

Za pewne znajdzie się tutaj osoba która próbowała sie uczyć C++ lecz już po pierwszych lekcjach (najczęściej kalkulatora), w których pokazuje się gotowy kod bez pokazywania co i jak działa i dlaczego tak a nie inaczej, rozstaje się z artykułem/poradnikiem twierdząc "to nie dla mnie", "nie czaje lol", "to głupie". Mój kurs programowania w języku C++ będzie dla każdego kto chce się go nauczyć, od samych podstaw, typów danych, składni i tak dalej. Jako iż cel tego jest programowanie cheatów, nie będę pisał o wszystkich rzeczach z c++, piszę tylko te które są najbardziej potrzebne, na początek w zupełności to wystarczy.

 

Nie będe tutaj tłumaczyć dogłębnie co to jest język programowania, po co i do czego się go stosuje.

C++ jest jednym z najłatwiejszych języków (według mnie :P), jego składnia jest prosta i przejrzysta, wymaga (przynajmniej na podstawie bardzo podstawowym) języka angielskiego ze względu na to że w 99% nazwy funkcji w jakimkolwiek API (Application Programming Interface - interfejs programowania aplikacji, o tym później)(czy to windowsowym czy nawet linuxowym) będą właśnie w tym języku.

 

Co będzie nam potrzebne?

  • Kompilator, ja polecam (jak i będę sie na nim opierał w tym kursie) Visual Studio, sam korzystam z niego w wersji 2013 Ultimate, można za darmo pobrać (najlepiej w wersji 2013) Visual Studio C++ Express ze strony microsoftu, można też pobrać obraz ISO/installer wersji Ultimate i korzystać z niej za darmo przez 30 dni (później trzeba podać klucz aktywacyjny).
  • Notepad++ który ładnie koloruje składnie, może przydać się gdy chcecie podglądnąc kod bez potrzeby włączania całego Visuala. Wspiera on nie tylko .txt ale również php, c,html, batch, i inne.
  • (ewentualnie)Debugger (ewentualnie inny niż ten wbudowany w VS'a, będzie BARDZO przydatny przy większych projektach, gdy program nie wiadomo dlaczego się wysypuje, itd). Napisze o nim więcej w następnej części.
  • Oczywiście trochę miejsca na dysku (na Visuala).
Polecam również posiadać zeszyt w którym zapiszecie najważniejsze rzeczy, pomaga to w nauce.

Tworzenie projektu w MS Visual Studio 2010 i 2013 i ustawienie go na MultiByte

 

 

 

!WAŻNE! Dodawanie bibliotek i headerów do pliku:

Robi się to bardzo prosto, dla bibliotek stosujemy:

 

#pragma comment(lib,"nazwabiblioteki.lib") // w folderze z projektem lub standardowych bibliotek
//lub bezpośrednio do biblioteki na dysku:
#pragma comment(lib,"C\\libs\\biblioteka.lib");
Dodawanie headerów:

 

#include "header.h" // dla headera w folderze z projektem(w tej samej lokalizacji co plik cpp/h w którym to wpisujesz)
//lub bezpośrednio do lokalizacji na dysku:
#include "C:\headery\header.h"
//lub standardowe (windowsowe np w przypadku visual studio), lub z tego folderu headerów który jest dodany w opcjach projektu
#include <windows.h>
1. W jakich plikach i których zapisujemy kod źródłowy aplikacji c++?
  • [CPP] Zacznę od plików o rozszerzeniach .cpp, to właśnie one są głownymi miejscami kodu źródłowego, w każdym projekcie musi znaleźć sie plik główny (najczęściej go nazywa sie Main/AppMain, lecz od jego nazwy to nie zależy czy jest jako główny czy nie.) W tym pliku umieszczamy tzw funkcje startową. Dzięki możliwości stosowania wielu plików CPP mamy możliwość prostego uporządkowania kodu źródłowego naszej aplikacji, np według klas (o nich również napisze, ale później).
  • [H] Pliki z roszerzeniem .h są to tzw. headery czyli nagłówki, każdy header się dołącza (includuje) do plików CPP poprzez #include <plik> lub #include "plik" (o tym napisze dalej). W headerach zapisuje się definicje, klasy, struktury, externy, i ogólnie wszelkie dane z których chcemy korzystac w więcej niż jednym pliku cpp lub h.
  • [HPP] Istnieją również pliki HPP czyli headery c++, lecz ze względu na to że nie są tak często używanie jak .h, nie będę o nich pisał, nawet w samym HL1 Sdk się korzysta .h a nie hpp.
  • Jeszcze można do nich zaliczyć plik projektów danego kompilatora (w przypadku Visual Studio będzie to .vsproject, .sln)
2. Zmienne, trzymanie danych (standardowe, zależne od typu danych ustawionych w projekcie)

Jak to w każdym języku programowania, gdzieś trzeba trzymać dane, czy to zmienne czy stałe, gdzieś się musi znaleźć dla nich odpowiednie miejsce.

Zacznijmy od zmiennych dla trzymania znaków/tekstu.

  • char * - przy jego pomocy możemy przetrzymywać tekst lub jakiś znak. Weźmy na przykład "cshacked", aby zapisać je przy pomocy C++ potrzebujemy tablicy znaków (każdy znak z "cshacked" musi być w swojej komórce w tablicy), możemy go zapisać w taki sposób:

    char * szCShacked = "cshacked";

    * oznacza tablice o nie określonym rozmiarze, dynamiczną

    szCShacked to nazwa zmiennej, polecam stosowanie specjalnych przedrostków nazw w celu uproszczenia sobie pracy, o tym później.

    = "zapełnia" komórki tablicy po kolei od 0 tekstem "cshacked"

    ; jest to wymagane zakończenie "definiowania" danej zmiennej itd, o tym napiszę więcej w dalszym punkcie - składni.

  • char[128] będzie tworzyć tablicę o rozmiarze 128 znaków,

    char szCShacked[128] = "cshacked";

    myślę że tu nie trzeba tłumaczyć, ważne żeby tekst po = nie przekraczał wielkości chara :)

Ok, teraz czas na zmienne dla liczb, tutaj jest ich trochę więcej, w zależności od typu liczby (zmiennoprzecinkowa, naturalna, itd).
  • bool - Przyjmuje on tylko dwie wartości, true lub false czyli 1 lub 0, wielkość 1 bajt.
  • int - Służy do przetrzymywania liczb całkowitych, jego wielkość to 4 bajty
  • float - Jest to odpowiednik Int dla liczb zmiennoprzecinkowych, również jego wielkość wynosi 4 bajty
3. Składnia w C++

Zacznijmy od funkcji, w C++ każdą funkcje rozpoczynamy od jej "typu", standardowo dla funkcji będzie to void, lecz możemy również zamienić go na char'a, int'a, bool'a, float'a lecz wtedy już musi zwrócić jakiś wynik.

Warto zaznaczyć że w C++ są dwie możliwości tworzenia komentarzy, cały obszar (zaczyna się od "/*" a kończy "*/" lub jedna linia ("//" przed tekstem):

/*
 Tekst objęty komentarzem, nie będzie uwzględniany przez kompilator 
*/

// Ta linia również nie będzie uwzględniana przez kompilator :>
Składnia funkcji wygląda tak:

 

TYP nazwa(typ_argumentu nazwa_argumentu, typ_argumentu2 nazwa_argumentu2)
{ // "Otwarcie" obszaru funkcji

if(nazwa_argumentu == nazwa_argumentu2) // porównanie, więcej o tym poniżej
{ // otwieramy

 Zawartość tego obszaru zostanie wykonana jeśli obydwa argumenty są takie same

} //zamykamy
else // jeśli nie zgadza się porównanie
{

}
return wartosc; // jeżeli typ funkcji to typ danych (char, float, itd), to musi coś zwrócić!, przy standardowym void nic on nie zwraca.
} // "Zamknięcie" obszaru funkcji
Liczba otwarć i zamknięć funkcji musi się zgadzać, czyli każdy obszar musi być otwarty a później zamknięty, jest również możliwość tworzenia obszaru w obszarze.

 

4. Operacje na danych i operatory. (Dodawanie, odejmowanie, mnożenie, potęgowanie, zaokrąglanie oraz porównywanie)

Czasami trzeba coś porównać, dodać, sprawdzić czy się zgadza z innym, zaokrąglić, odjąć, teraz wam pokaże jakimi operatorami się to robi :)

  • + pierwszy będzie plus, czyli dodawanie, jeśli dodajemy dwie zmienne, to muszą być one tego samego typu (float z floatem, int z intem), aczkolwiek w przypadku dodawania zmiennych liczbowych, mogą się one dodać lecz dojdzie do utraty danych (np dodając 1.5 (float) do 1 (int) wyjdzie 2).
  • - minus, odejmowanie, tak jak powyżej, myślę że nie trzeba tego tłumaczyć od nowa
  • * mnożenie, mnożymy głównie zmienne (lub też stałe) tego samego typu lecz pomnożenie 2.5(float) przez 3(int) to w zależności od zmiennej do jakiej to przypiszemy, będzie prawidłowe
  • pow jest funkcją odpowiedzialna za potęgowanie, w jej pierwszym argumencie podajemy liczbę do potęgowania, a w drugim potęgę, zwraca ona wynik.
  • round, ceil, floor służą do zaokrąglania liczb, każda z nich robi to inaczej (podwyższając wynik do góry, obniżając)
  • operatory warunkowe do porównywania danych: == (równa się), != (nie równa się), < i > (mniejsze/większe od), <= (mniejsze lub równe), >= (większe lub równe)

    przy porównywaniu wielu danych korzysta się jeszcze z

    || - czyli to lub to

    && - czyli to i to

    ! - negacja czyli "odwrócenie"

    przykłady:

    if(arg1 == 1 && arg2 == 1)
    {
    }
    else if(arg1 == 2 || arg2 == 2)
    {
    }
    
  • W przypadku tekstu (char'a) do powyższych (prawie wszystkich) operacji są specjalne funkcje które się stosuje wraz z nimi lub zamiast ich(podam przykłady)

    jedną z nich, służącą do "aplikowania" tekstu do tekstu jest sprintf(lokalizacja,"składnia", argumenty)

    jako lokalizację podajemy char'a do którego ma zostać przypisana składnia wraz z argumentami

    przykład:

    char * czar1 = "test1";
    char * czar2 = "test4";
    char szWynik[64];
    
    sprintf(szWynik,"Czar1 i Czar2 to będzie %s%s",czar1,czar2);
    
    Już tłumacze o co chodzi z tymi "%s", jeśli budujemy składnie, to w zależności od typu wpisywanych danych trzeba zastosować odpowiednią formułkę, będzie to np %s dla char'a, %f dla floata, %i dla int'a, warunki będą przypisywane po kolei do tych formułek.

     

    Funkcje do operacji na stringach [podstawowe najbardziej potrzebne](łańcuchach znaków):

    strcmp i stricmp - służą do porównywania dwóch stringów, wynik będzie 0 lub 1, różnica między nimi jest taka że ta druga ignoruje wielkość znaków.

    strcpy - kopiujemy nim jeden string(łańcuch) do tablicy char'a

    strcat - scalamy dwa stringi

    sprintf - formatowanie stringu (wcześniej pokazałem)

    strlen - zwraca długość stringa (ilość znaków)

    printf - wypisuje tekst do konsoli

5. Stałe i definicje

Tutaj nie będę się rozpisywać, stała jest stała czyli nie zmienia swojej wartości, definicja również, lecz w przypadku definicji możemy tworzyć bardzo ciekawe i użyteczne makra.

  • #define cos 1 // zdefiniujemy stałą cos o wartości 1, możemy również zdefiniować odwołanie do funkcji z już nadanymi argumentami

    np: #define KONIEC ExitProcess(1); // po wywołaniu gdzieś w kodzie tej definicji, zostanie wykonana instrukcja ExitProcess z argumentem 1 czyli wyjście z programu

  • #define makro(cos1,cos2) printf(#cos1);printf(#cos2); - zdefiniowaliśmy makro (coś jak funkcja) która po podaniu do niej argumentów (cos1,cos2) wykona dwa razy printf - czyli wyświetlenie tekstu w konsoli, z odpowiednimi argumentami
  • const typ_danych stala = 1; // utworzy to stałą (ważne, const oznacza stałą!) stala która będzie mieć zawsze wartość 1, typ_danych to może być int, float, char (wtedy podamy tekst, itd).
Na koniec części pierwszej, prosty hello world :)

(W przypadku błędu "LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt" trzeba wyłączyć Incremental Linking:

http://s3-eu-west-1.amazonaws.com/screenshooter-legacy/nm-qqjbftngconnfessmvsp.jpg

#include <stdlib.h> // do system
#include <stdio.h> // do printf
int main()
{
    printf("Hello world CShacked.pl \n"); //wypisujemy w konsoli
    system("pause"); //pauzujemy program
    return NULL; // zwracamy NULL czyli 0
}
Wynik:

http://s3-eu-west-1.amazonaws.com/screenshooter-legacy/nm-bguanufyptfpndcanjwc.jpg

Obrazki

Sorry za brak miniaturek obrazków ale coś edytor mi ich nie chciał przyjąć

Problemy

Jeśli masz jakiś problem z kodem w C++, nie wiesz jak go rozwiązać, jak coś zrobić, pisz na forum w odpowiednim dziale, na pewno ktoś Ci pomoże, rozwińmy trochę ten dział bo to na prawdę ciekawa dziedzina informatyki :)

"Stay hungry stay foolish" - Steve Jobs

Odnośnik do komentarza

Dzięki za słowa uznania, pisałem to z myślą o tych którzy kompletnie nic nie mogli pojąć przy czytaniu książki, dlatego też dla kogoś kto dobrze jest obeznany w C++ to może wyglądać śmiesznie, ale małymi kroczkami dojdziemy do wielkich rzeczy :).

Część 2 już niedługo!

"Stay hungry stay foolish" - Steve Jobs

Odnośnik do komentarza

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności