Advertisement
Guest User

Notatki do obiektowego

a guest
Dec 11th, 2019
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.13 KB | None | 0 0
  1. //ARGUMENTY DOMNIEMANE
  2.     float fun (char, float=10, float=1); //deklaracja funkcji
  3.     //możliwe wywołania funckji
  4.     float fun('a');
  5.     float fun('a', 1);
  6.     float fun('a', 1, 2);
  7.  
  8. //PRZECIĄŻANIE FUNKCJI
  9.     int fun(int);
  10.     int fun(int, int);
  11.     int fun(float);
  12.     //w main:
  13.     int a = 1;
  14.     int b = 1;
  15.     float f = 3.5;
  16.     //mozliwe wywolania:
  17.     fun(a);
  18.     fun(a, b);
  19.     fun(f);
  20.    
  21. //FUNKCJE INLINE
  22.     //do małych, krótkich funkcji
  23.     inline int zaokraglij (float liczba){
  24.         return (liczba+0.5);
  25.     }
  26.     //w main
  27.     float x = 3.23;
  28.     cout << zaokraglij(x) << endl;
  29.    
  30. //PRZEKAZYWANIE ARGUMENTOW
  31.     void f1 (int, int);
  32.     void f2 (int*, int*);
  33.     void f3 (int&, int&);
  34.     //w main
  35.     int a = 3;
  36.     int b = 4;
  37.     f1(a,b); //argumenty przekazane przez wartosc - funkcja operuje na kopii
  38.     f2(&a,&b); //argumenty przekazane przez wskaźnik - funkcja operuje na adresach
  39.     f3(a,b); //argumenty przekazane przez referencję - funkcja operuje na tych zmiennych (nie są tworzone kopie)
  40.    
  41. //WSKAZNIKI TYPU VOID
  42.     int *wskI; //wskazuje na adres zmiennej typu int
  43.     float *wskF; //wskazuje na adres zmiennej typu float
  44.     void *wskV; //wskazuje na adres jeszcze nie wiemy jakiej zmiennej, można mu przypisać wskaźnik każdego dowolnego typu (bez przydomka const)
  45.     w = wskI;
  46.     w = wskF;
  47.     //ale
  48.     wskF = (float*) wskV;
  49.     wskI = (int*) wskV;
  50.    
  51. //DYNAMICZNE PRZYDZIELANIE PAMIĘCI
  52.     char *wsk;
  53.     wsk = new char; //adres nowego obiektu typu char przekazany do wskaźnika
  54.     delete wsk; //usunięcie obiektu pokazwyanego przez wskaźnik wsk
  55.    
  56.     float *tab;
  57.     tab = new float[15];
  58.     delete []w; //usunięcie tablicy pokazywanej przez w
  59.     //obiekty utworzone przez "new" są dynamiczne, dlatego przed przypisaniem wartości są w nich śmieci
  60.    
  61.    
  62. //KLASY
  63.     class mojaKlasa{
  64.         //pola klasy - zmienne
  65.         //metody klasy - funkcje
  66.     };
  67.  
  68.     //Aby odnieść się do pola:
  69.     //obiekt.składnik
  70.     //wskaźnik->składnik
  71.     //referencja.składnik
  72.  
  73.     //różne klasy mogą posiadać tak samo nazwane funkcje
  74.  
  75.     //DEFINICJA METODY POZA CIAŁEM KLASY
  76.     class punkt{
  77.         float x;
  78.         float y;
  79.     public:
  80.         void wypisz();
  81.     };
  82.        
  83.     void punkt::wypisz()
  84.     {
  85.         cout << "x=" << x << "\ty=" << y << "\n";
  86.         //alternatywnie:
  87.         //cout << "x=" << this->x << "\ty=" << this->y << "\n";
  88.     }
  89.  
  90.     //WSKAŹNIK THIS
  91.     // wskaźnikiem this nie można poruszać (jest typu "klasa const")
  92.  
  93.     //KONSTRUKTOR
  94.     class punkt{
  95.         float x;
  96.         float y;
  97.     public:
  98.         punkt(); //konstruktor bezargumenotwy
  99.         punkt(float a, float b){x=a; y=b}; //konstruktor dwuargumentowy
  100.     };
  101.     //w main
  102.     punkt p1 = punkt(2,4);
  103.     punkt p2(2, 4);
  104.     punkt p3; //domyślnie wywoła się konstruktor bezargumenotwy
  105.     //- można go przeładować
  106.     //- nie zwraca żadnej wartości
  107.     //- nie tworzy obiektu, ale nadaje mu wartości początkowe
  108.     //- wywoływany tylko raz - w momencie, gdy obiekt powoływany jest do życia
  109.     //- gdy nie napiszemy żadnego konstruktora, będzie domyślny konstruktor bezargumenotwy (nie będzie on widoczny w kodzie programu, ale będzie obecny)
  110.     //- wiele obiektów tymczasowych może pojawić się w sposób niejawny (aby zobaczyć do konstorów dodać linię wypisującą, że wywołano konstruktor)
  111.     //- klasa może mieć tylko jeden konstruktor domniemany
  112.     //- konstruktor domniemany można wywołać bez żadnych argumentów (nie koniecznie jest to konstruktor bezargumentowy), czyli ze wszystkimi argumentami domniemanymi
  113.    
  114.     class demo
  115.     {
  116.         int x, y;
  117.     public:
  118.         demo(int xx=1, int yy=0) //konstruktor z 0,1 bądź 2 argumentami
  119.         {
  120.             x = xx;
  121.             y = yy;
  122.         }
  123.         demo(demo &d) //konstruktor kopiujący
  124.         {
  125.             x = d.x;
  126.             y = d.y;
  127.         }
  128.     };
  129.    
  130.     //DESTRUKTOR
  131.     ~nazwa_klasy(){};
  132.     //- bezargumentowy
  133.     //- nie zwraca żadnej wartości
  134.     //- nie jest konieczny
  135.     //- jawne wywołanie nie likwiduje obiektu, on ciągle istnieje, jedynie został zmodyfikowany
  136.    
  137. //ZMIENNE STATYCZNE
  138.     int funkcja(){
  139.         static int ile_wywolan = 0;
  140.         ile++;
  141.         return ile;
  142.     }
  143.     //za n-tym wywołaniem funkcja zwróci n;
  144.     //- nie są ponownie inicjalizowane podczas ponownego użycia funckcji
  145.     //- przechowywane na stercie w segmencie danych, a nie na stosie
  146.     //- inicjalizowane wartością 0 (jeśli nie są inicjalizowane jawnie)
  147.     //- nie powinny być deklarowane wewnątrz struktury (kompilator C wymaga ciągłego obszaru pamięci dla struktur)
  148.    
  149. //KLASY C.D.
  150.     //ZMIENNE STATYCZNE W KLASIE
  151.     //- wspólne dla wszystkich obiektów
  152.     //- nie można ich inicjalizować za pomocą konstruktorów
  153.     //- może być prywatna, a i tak można ją inicjalizować
  154.     //- mają do niej dostęp także metody "nie-statyczne"
  155.    
  156.     class punkt{
  157.         int x, y;
  158.         static int ile; //deklaracja składnika statycnzego
  159.     public:
  160.         punkt(int, int);
  161.         ~punkt();
  162.         void wyswietl();
  163.     };
  164.    
  165.     int punkt::ile = 0; //definicja bez static
  166.     void punkt::punkt(int a, int b)
  167.     {
  168.         x = a;
  169.         y = b;
  170.         ile++; //metody "nie-statyczne" mają dostęp do pól statycznych
  171.     }
  172.    
  173.     //METODY STATYCZNE
  174.     //- mogą uzyskiwać dostęp tylko do statycznych składników lub innych statycznych metod klasy
  175.     //- nie mogą uzyskiwać dostępu do niestatycznych składników lub metod
  176.     //- muszą być definiowane w ciele klasy
  177.    
  178.     //LISTA INICJALIZACYJNA KONSTRUKTORA
  179.     class abc
  180.     {
  181.         const int N;
  182.         float x;
  183.         char c;
  184.         //nie wolno inicjalizować składnika stałego w taki sposób:
  185.         //consr int N = 100;
  186.         //konstruktor z listą inizjalizacyjną
  187.         abc(float liczba, int rozmiar, char znak):N(rozmiar),c(znak)
  188.         {
  189.             x = liczba;
  190.         }
  191.     };
  192.     //- składnikowy nie-const możemy nadać wartość przez:
  193.         //-> zwykłe podstawienie w ciele konstruktora
  194.         //-> listę inicjalizacyjną konstruktora
  195.     //- składnikowi const można nadać wartość jedynie za pomocą listy inicjalizacyjnej
  196.     //- lista inicjalizacyjna nie może inicjalizować składnika static
  197.    
  198.     //FUNKCJE ZAPRZYJAŹNIONE
  199.     //- funkcja spoza klasy, która ma dostęp do wszystich składowych prywatnych klasy
  200.     //- zwykle funkcja zaprzyjaźniona albo przyjmuje jako argument obiekt klasy albo zwraca obiekt klasy
  201.    
  202.     //funkcja zaprzyjaźniona z klasą
  203.     class example
  204.     {
  205.         int pole1;
  206.     public:
  207.         friend int fun(example);
  208.     };
  209.    
  210.     int fun(example myE)
  211.     {
  212.         //...
  213.     }
  214.    
  215.     //funkcja klasy A zaprzyjaźniona z klasą B
  216.     class B; //musi pojawić się definicja klasy B
  217.     class A
  218.     {
  219.         friend int B:fun(A);
  220.         //friend typ B:fun(argumenty);
  221.     };
  222.     class B
  223.     {
  224.     public:
  225.         int fun(A myA);
  226.     };
  227.    
  228.     //wszystkie funkcje klasy B zaprzyjaźnione z klasą ARGUMENTOW
  229.     class B;
  230.     class A
  231.     {
  232.         friend class B;
  233.     };
  234.     class B
  235.     {
  236.         //...
  237.     };
  238.    
  239. //PRZECIĄŻANIE OPERATORÓW
  240.     //- co najmniej jeden z argumentów przyjmuje obiekt danej klasy (musi być obiekt, a nie wskaźnik do obiektu)
  241.     //- mechanizm przeciążania operatorów:
  242.         //-> w postaci funkcji składowej
  243.             // a @ b (równoważne) a.operator@(b);
  244.         //-> w postaci niezależnej funckji (zwykle zaprzyjaźnionej z klasą/klasami)
  245.             // a @ b (równoważne) operator@(a,b);
  246.     //przeładowany operator+ jako funkcja składowa klasy
  247.     class wektor3w
  248.     {
  249.         float x, y, z;
  250.     public:
  251.         wektor3w(float a=0.0,float b=0.0, float c=0.0);
  252.         wektor3w operator+(wektor3w &v);
  253.     };
  254.    
  255.     wektor3w wektor3w::operator+(wektor3w &v)
  256.     {
  257.         wektor3w wynik;
  258.         wynik.x = x+v.x;
  259.         wynik.y = y+v.y;
  260.         wynik.z = z+v.z;
  261.         return wynik;
  262.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement