Egzamin C++
Zagadnienia:
Konstruktory - kopiujący, domniemany, dziedziczenie, obiekty składowe, inicjalizacja tablic obiektami.
Destruktory - wirtualne
Zmienne i funkcje statyczne
Wskaźniki do składowych klasy
Przeładowanie operatorów:
+, -, * , /
+=, *=, itp.
++, --
New , delete
[], (), ->
<<, >>
Konstruktory konwertujące, funkcje konwertujące, kolejność dopasowania wywołania funkcji
Optymalizacja wartości zwracanej:
konstruktory konwertujące,
konstruktory obliczeniowe
operatory op=()
7. Dziedziczenie i polmorfizm
8. Model obiektu C++ - podstawowy, dziedziczenie, funkcje wirtualne.
9. Szablony klas:
rodzaje parametrów
specjalizacja klasy i funkcji składowych
dziedziczenie szablonów, klas szablonowych,
klasy pojemnikowe- wektor, lista
iteratory
uchwyty
Rodzaje zadań:
napisanie programu
poprawa błędów
uzupełnienie programów
pytania opisowe
Zadania z list:
Zestawy:
1. class l_zes {
int re, im ;
public:
l_zes (int i=0; int j=0);
l_zes (const l_zes &);
l_zes & operator =(const l_zes &);
friend l_zes operator +(const l_zes & a, const l_zes & b);
friend l_zes operator -(const l_zes & a, const l_zes & b);
l_zes & operator +=(const l_zes & a);
Poza ciałem klasy zdefiniuj:
konstruktory obliczeniowe dla funkcji operator - operator + optymalizujące zwracanie wartości obiektu typu string w funkcjach. Czy te konstruktory obliczeniowe mogą być prywatne?
Dlaczego operacja z3=z1+z2 (uwaga: możemy założyć, że nie istnieją konstruktory obliczeniowe) jest wolniejsza od sekwencji operacji z3=z1; z3+=z2
2. Dane są następujące szkielety klas:
class X
{
public:
virtual f(void);
f1(void);
}, x, *px;
class Y: public X
{
public:
virtual f(void);
f1(void);
}, y, *py;
Które z powyższych zestawów przypisań jest poprawny, wyjaśnić dlaczego:
x=y; py=px;
y=x; py=px;
x=y; px=py;
px=py; y=x;
3. Dana jest klasa
class string
{ int roz ; // długość napisu
char *wsk;
public:
string(char n[]);
operator int () {return int;}
operator char * () {return wsk;}
};
Które z poniższych instrukcji są nieprawidłowe i dlaczego :
string s1(”ASDFG”)
void fun1 (float ) {//detale } ; fun1 (s1);
void fun3 (int k) {//detale } ; void fun3 (float k) {//detale } ; fun3 (s1);
b) Ponadto przeprowadzić następujące eksperymenty i zinterpretować wyniki.
- Dane sa konwersje zdefiniowane przez użytkownika: X −-> Y , Y −> Z. Czy istnieje niejawna
konwersja X −> Z?
- Dana jest konwersja X −> float. Czy istnieje konwersja X −> int?
- Dane sa konwersje: X −> float, X −> int, X −> char. Czy poprawna jest instrukcja
cout<<x<<endl, gdzie x jest obiektem klasy X?
4. class l_zes {
int re, im ;
public:
.......operator ++; przedrostkowy
.......... operator ++..; przyrostkowy
l_zes(int i=0, int j=0):re(i), im (j) {}
l_zes(const l_zes & z): re(z.re), im (z.im) {}
l_zes & operator = (const l_zes & z){ }
~l_zes() {}
friend ..........operator<< .......... ;
Zmień klasę na szablon, Zdefinuj zaznaczone funkcje operatorowe dla szablonu oraz jeden z konstruktorów
5.
a) Zdefinuj wszystkie funkcje szablonu sort tak , aby poniższy kod był prawidłowy (instrukcje w main() były prawidłowe).
template <? >
class sort
{ int * wsk;
public:
void sortuj
{
}
};
int main()
{
sort<int , 20, rosnąco> obiekt1;
sort<int , 30, malejaco> obiekt1;
}
b) Zdefiniuj klasę specjalizowaną dla typu char * (nie definiować funkcji składowych , tylko deklaracje)
Jakie są etapy dopasowywania danego wywołania funkcji - uwzględniając szablony i funkcje konwertujące.
7. Zdefiniuj klasę string z uchwytem string_rep z zdefiniowaniem konstruktorów:
Nazwisko: grupa:
Napisz następujące deklaracje:
a) 5 elementową tablicę wskaźnik do funkcji char * fun (int, char);
b) wskaźnik do elementu klasy A typu int
c) wskaźnik do funkcji składowej klasy A int fun (int);
class A {
public:
int i,j;
int fun (int)
int fun1 (int)
};
2. Przeprowadzic nastepujace eksperymenty i zinterpretowac wyniki.
a) Dane sa konwersje zdefiniowane przez uzytkownika: X −> Y , Y −> Z. Czy istnieje niejawna
konwersja X −> Z?
b) Dana jest konwersja X −> float. Czy istnieje konwersja X −> int?
c) Dane sa konwersje: X −> float, X −> int, X −> char. Czy poprawna jest instrukcja
cout<<x<<endl, gdzie x jest obiektem klasy X?
Jezeli podane niejawne konwersje sa niemozliwe, to czy mozna je przeprowadzic bez dodawania
nowych metod konwertujacych?
Podaj etapy dostosowania (okreslenia która funkcja ma zostać wywołana) wywołania funkcji. Uwaga istnieją konwersje oraz funkcje szablonowe.
3. Zdefiniuj szablon do tworzenia tablic dynamicznych.
Zdefiniuj konstruktor, destruktor oraz funkcje szukania maksimum w tablicy. Napisz funkcje operatorową [ ] .
4. Dana jest klasa
class l_zes {
int re, im ;
public:
.......operator ++; przedrostkowy
.......... operator ++..; przyrostkowy
l_zes(int i=0, int j=0):re(i), im (j) {}
l_zes(const l_zes & z): re(z.re), im (z.im) {}
l_zes & operator = (const l_zes & z){ }
~l_zes() {}
friend ..........operator>> .......... ;
a) Zdefinuj zaznaczone funkcje operatorowe
b) Zmień klasę na szablon, który umożliwia obsługę liczb zespolonych typu float, double, int. Zdefiniuj konstruktor dla szablonu oraz funkcje operator <<
5. class L_zes {
int *re, *im ;
public:
L_zes (const char * = "");
L_zes (const L_zes &);
~string();
L_zes & operator =(const L_zes &);
friend L_zes operator +(const L_zes & a, const L_zes & b);
friend L_zes operator -(const L_zes & a, const L_zes & b);
L_zes & operator +=(const L_zes & a);
Zdefiniuj powyższe funkcje składowe klasy oraz konstruktory obliczeniowe dla funkcji
operator - operator + optymalizujące zwracanie wartości typu L_zes w funkcjach składowych.
Czy te konstruktory mogą być prywatne.
6. Dlaczego (polimorfizm) wywołanie funkcji wirtualnych może powodować narzuty czasowe w porównaniu z wywoływaniem funkcji zwykłych.
7. Dana jest klasa
class osoba{
char naz[20]
int wiek
public:
};
oraz następujące deklaracje
osoba grupa[3]
osoba *wsk = new osoba[10];
Zdefiniuj odpowiednie konstruktory oraz zainicjalizuj (lista inicjalizacyjna) wartości elementów tablic o ile jest to możliwe.
8. Zadeklaruj klasę podstawową oraz klasy pochodne, tak aby odzwierciedlały poniższy diagram
Zadeklaruj klasy wraz z składnikami, i funkcjami umożliwiającymi rysowanie każdej z funkcji (tylko deklaracji funkcji)