Gyakorló feladatok (4. hét)
Fontosabb kulcsszavak, fogalmak
- inicializáló lista
 - másoló konstruktor, értékadó operátor
 - destruktor
 - operátorok túlterhelése
 - implicit tagfüggvények és azok átdefiniálása
 - statikus adattagok és tagfüggvények
 
Javasolt gyakorló feladatok
- Bevezető feladat: egyszerű osztály megvalósítása.
Példa: Készítsen kör osztályt az alábbi műveletekkel:- inicializálható a sugár megadásával,
 - sugár lekérdezése/beállítása
 - kerület lekérdezése
 - terület lekérdezése, osztályon kívüli definícióval
 - kiírás ostream-re (pl. cout<<c)
 - + operátor, amelynek eredménye egy olyan kör, amelynek területe a két operandus területének összege.
 
 - A statikus tag alkalmazása.
Példa: Asztalokat akarunk nyilvántartani és minden pillanatban szeretnénk tudni, hogy hány asztalunk van. A feladat megoldásában használjuk a korábban készített String osztályt, vagy használhatjuk az STL-ből (Standard Template Library). - Dinamikus adattagú osztály.
Példa: Készítsen vektor osztályt, ami valósakat tárol dinamikusan. (Lásd az előadáson elhangzott KomplexTar.) Műveletek:- konstruktor az elemszám és elemek kezdőértéke megadásával (utóbbi elhagyható, ekkor 0 a kezdőérték)
 - másoló konstruktor
 - értékadó operátor
 - destruktor
 - indexelő ([]) operátor, túl-/alulindexelés elleni védelemmel
 
 - String rejtvény a 4. heti előadásról: Milyen függvények hívódnak meg, milyen sorrendben?
class String { char *p; int size; public: String( ); // 1 String(const char *); // 2 String(String&); // 3 ~String( ); // 4 String operator+(String&); // 5 char& operator[](int); // 6 String& operator=(const String&); // 7 -- alternatív: értékparaméterrel }; int main() { String s1("rejtvény"); String s2; String s3=s2; char c = s3[3]; s2 = s3; s2 = s3 + s2 + s1; }A C++ szabvány megengedi, hogy hatékony működés érdekében ne hívódjon másoló konstruktor olyan ideiglenes objektumok esetében, amelyeknek szerepe csupán egy másik objektum inicializálása. Emiatt a ténylegesen meghívott függvények eltérhetnek a várttól. Ezt a viselkedést GCC használata esetén a g++ -fno-elide-constructors kapcsolójával ki lehet kapcsolni. - 
Másik rejtvény: Mit ír ki a program a main() függvény egyes sorainak hatására?
class A { int k; public: A(const int i = 0) :k(i){ cout << 'k'; } A(const A& a) { k = a.k; cout << 'c'; } void operator=(A& a) { k = a.k; f(a); cout << 'e'; } A& operator*(int i) { cout << i*100; return *this; } void f(A a) { k++; cout << 'f'; } ~A() { cout << 'd'; } }; A& operator*( int i, A& a ) { cout << i; return a; } int main() { A a = A(1); cout << '\n'; // ______ a = a * 2; cout << '\n'; // ______ a = 3 * a; cout << '\n'; // ______ } // ______ 
        Utolsó frissítés: 2018-03-01 20.22        
  