Advertisement
m4ly

Programowanie Komputerów. Egzamin pytania

Jan 18th, 2014
277
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.56 KB | None | 0 0
  1. /*
  2. • Dlaczego funkcja inline powinna być umieszczona na górze pliku?
  3.  
  4.   Funkcje typu inline muszą być na samej górze tekstu programu albo w plikach *.h(dołączane są w czasie
  5.   kompilacji modułow programu) ponieważ ciała tych funkcji muszą być znane kompilatorowi w danym zakresie
  6.   ważności
  7.  
  8.   Grębosz str 138; 5.9
  9.  
  10. • W jakie operatory służą do dynamicznej alokacji pamięci w C++?
  11.    
  12.     Operator new - dla obiektów
  13.     Operator new[] dla tablic
  14.  
  15. • Dlaczego przy programowaniu obiektowym nie można korzystać z funkcji malloc?
  16.  
  17.   Operator new automatycznie wywołuje konstrutkor. Przy zastosowaniu malloc - tej akcji wywołania
  18.   kosntruktora nie będzie. Podobnie z delete - wywoła się dtor - przy free dtor nie zostanie uruchomiony
  19.   I malloc zwraca wskaźnik do void a new wskaźnik do typu który własnie stawrza.
  20.  
  21.   Grębosz str 274; 8.11.8
  22.  
  23. • W jaki sposób należy zainicjalizować zmienną statyczną będącą składnikiem klasy? Podaj przykład.
  24.    
  25.     // Klasa.cpp
  26.     class Klasa
  27.     {
  28.         static int x;
  29.     };
  30.  
  31.     //Klasa.h
  32.     int Klasa::x = 0;
  33.  
  34.  
  35. • Co to są funkcje statyczne będące składowymi klasy?
  36.  
  37.   Zdeklarowanie funkcji składowej jako statycznej sprawia, że nie zawiera ona wskaźnika this.
  38.   Nie dotyczy ona wówczas konkrentego obiektu, tylko klasy obiektów
  39.  
  40.   Grębosz str 415-17
  41.  
  42. • W jaki sposób można zaimplementować przeładowany operator post- i pre- inkrementacji?
  43.  
  44.   T T::operator--(analogicznie jak niżej)
  45.   T T::operator++(int)
  46.   {
  47.    int o_ile = 2;
  48.    T kopia(*this);
  49.    x = kopia.x + o_ile;
  50.    return kopia;
  51.   }
  52.  
  53.   Grębosz str 774-777
  54.  
  55. • Czy są jakieś ograniczenia na argumenty przeładowanego operatora?
  56.  
  57.   Tak.
  58.  
  59. • Czy możemy przeładować wszystkie operatory?
  60.  
  61.   Nie, a dokładniej operatrów: .   .*   ::   ?:    #    ##   i rodzine *_cast`ów
  62.  
  63.   Grębosz str 710
  64.  
  65. • Na czym polega przeładowanie operatorów?
  66.  
  67.  
  68. • Co to jest destruktor?
  69.  
  70.     Dtor klasy K to funkcja składowa o nazwie ~K.
  71.     Dtor to "sprzątaczka".  Sprząta obiekt automatycznie po wyjściu z zakresu ważności.
  72.     Grębosz str 402 i 605
  73.  
  74. • Klasa B dziedziczy w sposób prywatny po klasie A. Czy możliwe jest zachowanie oryginalnego sposobu dostępu do składników klasy A.
  75. W jaki sposób można go zrealizować?
  76.  
  77.  
  78.  
  79. • Jeżeli w klasie D odwołamy się do zmiennej x, która zmienna zostanie wybrana (z klasy A czy C)? Dlaczego?
  80.  
  81.   Z klasy C
  82.  
  83.   Jeżeli składowa o tej samej nazwie dziedziczona jest raz bezpośrednio z klasy bazowej,
  84.   a drugi raz jest ona dalszym potomkiem, to nie ma wieloznaczności, bo zawsze zostanie wybrana składowa bliższa.
  85.  
  86. • Czy można łączyć dziedziczenie wirtualne z dziedziczeniem normalnym?
  87.   Tak
  88.  
  89.  
  90. • Jak wywoływane są konstruktory w przypadku dziedziczenia wirtualnego?
  91.  
  92.     Klasy dziedziczone wirtualnie konstruowane są na samym początku, przed innymi klasami bazowymi.
  93.     Dla większej liczby klas dziedziczonych wirtualnie kolejność wywoływania konstruktora odpowiada kolejności na liście pochodzenia.
  94.  
  95. • Jakich operacji nie można wykonywać na klasie abstrakcyjnej?
  96.    
  97.     Tworzyć obiektów tej klasy
  98.     Definiować funkcji przyjmujących jako parametr obiekt tej klasy
  99.     Zwracać obiektów tej klasy jako wyniku działania funkcji
  100.     Używać tego typu przy jawnej konwersji
  101.  
  102.  
  103.    Po co definiuje się destruktor wirtualny?
  104.  
  105.    Po to żeby móc po nim dziedziczyć - tj żeby wszystkie dtory od najnizej klasy w hierachi w góre zostały wywołane
  106.  
  107.  
  108. // Dawid
  109.  
  110. Czym jest hermetyzacja ?
  111.  
  112.    Hermetyzacja (inna używana nazwa to enkapsulacja) – Hermetyzacja polega na ukrywaniu pewnych danych składowych lub metod obiektów danej klasy tak,
  113.    aby były one dostępne tylko metodom wewnętrznym danej klasy lub funkcjom zaprzyjaźnionym.
  114.  
  115. Co to jest polimorfizm i kiedy ma miejsce ?
  116.  
  117.  
  118.  
  119. Private, public, proctected czym są oraz jakie są różnica pomiędzy nimi ?
  120.  
  121.  Operator widoczności przy klasie, z której dziedziczymy pozwala ograniczyć widoczność elementów publicznych z klasy bazowej.
  122.  
  123.  public - oznacza, że dziedziczone elementy (np. zmienne lub funkcje) mają taką widoczność jak w klasie bazowej.
  124.  protected - oznacza, że elementy publiczne zmieniają się w chronione.
  125.  private - oznacza, że wszystkie elementy klasy bazowej zmieniają się w prywatne.
  126.  brak operatora - oznacza, że niejawnie (domyślnie) zostanie wybrany operator private
  127.  
  128. Co to są szablony klas, funkcji i funkcje wyspecalizowane ?
  129.  
  130.  
  131. W jaki sposób można zaimplementować operator= ?
  132.  
  133.  Klasa& operator=(const Klasa& orginalny_obiekt)
  134.  {
  135.    
  136.     atrubut = orginalny_obiekt.atrybut;
  137.     return *this;
  138.  }
  139.  
  140. W jaki sposób można zaimplementować operator>= ?
  141.  
  142. bool operator>=(const Klasa& org)
  143. {
  144.     if(atrybut >= org.atrybut)
  145.         return true;
  146.  
  147.     return false;
  148.  
  149. }
  150.  
  151. Czym jest friend i jakie ma cechy, na co pozwala ?
  152.  
  153. Zaprzyjaźnianie (friend). Funkcję F() deklarujemy jako zaprzyjaźnioną z klasą X, jeśli chcemy, aby F() miała dostęp do prywatnych lub chronionych
  154. danych składowych klasy X.
  155.  
  156. W jaki spsób można zaimplentować operator<< ?
  157.  
  158. friend ostream& operator<<(ostream &wyjscie, const Klasa& org)
  159. {
  160.     return wyjscie << org.atrybut << "---" << org.atrybut2 << endl;
  161. }
  162.  
  163. Pokaz na przykladzie jak zainicalizować obiekt jawnie i niejawnie ?
  164.  
  165.   Klasa a(); niejawnie
  166.   Klasa a = Klasa(); jawnie
  167.  
  168. Co to jest konstruktor kopiujący ?
  169.  
  170. Co to jest this oraz operator -> ?
  171.  
  172. Co to jest referencja  ? ( z dedykacją dla Leszka ;-) )
  173.  
  174. http://pl.wikibooks.org/wiki/C%2B%2B/Referencje#Czym_jest_referencja.3F
  175.  
  176. Czy w C++ można dziedziczyć po kilku klasach ?
  177.  
  178. Tak
  179.  
  180. Czy funkcja virtual może być zarazem funkcją statyczną lub zaprzyjaźnioną ?
  181.  
  182. Funkcja wirtualna nie może być funkcją statyczną.
  183. Funkcja wirtualna może być zaprzyjaźniona z inną klasą.
  184.  
  185. Co to jest klasa abstrakcyjna - pokaż na przykładzie ?
  186.  
  187. Klasa abstrakcyjna to taka, która posiada co najmniej jedną funkcje czysto wirtualną
  188. class A
  189. {
  190.     public:
  191.    
  192.     A();
  193.     virtual ~A();
  194.     virtual void Pokaz() = 0;
  195. }
  196.  
  197. Funkcja czysto wirtualna. Co to takiego ?
  198.  
  199. np: virtual void Pokaz() = 0;
  200.  
  201. Funkcja czysto wirtualna oznacza, że nie ma się ona nigdy wykonywać.
  202. Istnienie funkcji czysto wirtualnej powoduje, że klasa nie może definiować swoich obiektów.
  203.  
  204.  
  205.  
  206.  
  207. [... Dziedziczenie wielobazowe - dokladnie przezczytać, głowne problemy]
  208.  
  209. */
  210.  
  211. class A
  212. {
  213. private:
  214.     int x;
  215. public:
  216.     int getX()
  217.     {
  218.         return x;
  219.     }
  220. };
  221.  
  222.  
  223. class B : private A
  224. {
  225.    
  226.    
  227. };
  228.  
  229. class C : A
  230. {
  231.  
  232.    
  233. };
  234.  
  235. class D : C, B
  236. {
  237.  
  238. };
  239.  
  240.  
  241. int main(void)
  242. {
  243.  
  244.  
  245.  
  246.     return 0;
  247. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement