Jövő órán kiszh lesz.
Húsvéti házi feladat pótlás.
Az eddigi C++-os feladatok közül (3-6)
az egyik eddig el nem fogadott házi javítható a normál menetrenden kívül. Határidő: április 7. Kérlek, hogy Emil hozza át nekem a zipet. A file a szokásos elnevezésű, kiegészítve a
Neptun kóddal, a tárgy: hf0407 <Neptun kód> legyen, hogy Emil ne tévedhessen el.
Órai feladat
Készítsünk saját
String osztályt az alábbiak szerint.
-
Az
innen letöltött String.h állományt egészítsük ki a hiányzó függvénydeklarációkkal!
- Pótoljuk a hiányzó const kulcsszavakat ott, ahol annak jelentősége van! (Az érték szerint átadott típusoknál nincs)
- Adjuk át a paramétereket konstans referenciával, ahol ez megéri (a beépített típusoknál nem, ott érdemesebb másolni).
- Adjuk vissza a visszatérési értéket referenciával, ahol ez lehetséges. (Vigyázat, ez könnyen életveszélyessé válhat.)
- Írjuk meg a függvényeket a String.cpp állományban! Figyeljünk a névterekre!
- Helyezzünk el egyedi kiírást valamennyi konstruktorban és a destruktorban, majd futtassuk le soronként a main() függvényt! Figyeljük a kimenetet: hol melyik konstruktor, vagy destuktor hívódik, miért?
- Vegyük ki az append függvények hívását a megjegyzésből, és készítsük el a függvényeket.
7. Házi feladat.
Fejezzük be az órai programot, különös tekintettel az utolsó előtti pontra!
Bővítsük ki az órai feladat
string osztályát az alábbiak szerint.
-
Általános elv: ami lehet, az legyen const. Ahol lehet, és érdemes, referenciát adjunk át/vissza másolás helyett. A szokásoshoz hasonló értelmű operátorok minden tekintetben viselkedjenek úgy, mint ahogy az alaptípusoknál megszoktuk.
-
Kívülről hozzáférhetetlen tagváltozók: a string mérete, a dinamikus memória címe. A tárolt karaktertömb ne legyen nulla-terminált.
-
Kivételesen valamennyi konstruktor és a destruktor is nyomtasson egy egyedi jelzést, és a string tartalmát, hogy követni tudjuk az objektumok életét. (Pl. C1:alma, D:korte)
- Készítsünk a szokásos módon működő =, ==, !=, < és >= operátorokat string objektumokra. (Hasonlításkor telefonkönyv rendezésre gondoljunk al<alfa<alma.)
-
Valósítsunk meg néhány további operátort: Str + Str ill. Str += Str (összefűzi a két stringet),
Str + char ill. Str += char (a string végéhez fűzi a karaktert).
-
Készítsünk ~ Str unáris operátort, mely a stringbeli kisbetűket/nagybetűket invertálja. Unáris operátor tagfüggvénynek nincs paramétere, this mutat a stringre.
-
Valósítsunk meg néhány friend operátort: ostream << Str, char / Str (visszaadja az adott karakter első előfordulásának indexét; -1, ha nem fordul elő.)
-
Készítsünk kétféle Str [int] operátort a karakterek közvetlen eléréséhez: az egyik, amin keresztül kiolvasunk egy karaktert, a másik, amivel felül tudunk írni egy karaktert.
(Miért nem elég egy operátor? std::cout<<s2[3], ill. s1[0]='X') A [] operátorok nem kell figyeljenek az index helyes értékére! (majd pár hét múlva...).
-
A kipróbáló modul úgy teszteljen minden operátort és függvényt, hogy követhető legyen, hogy melyik hívás milyen ctor/dtor aktivitást eredményezett.
-
Szorgalmi rész:
Készítsünk a kiíró mintájára beolvasót: istream >> Str (beolvasás)!
include "../_foot.inc"; ?>