Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilBožena Křížová
1
Seminář C++ 4. cvičení Objekty Ing. Jan Mikulka
2
Co je objekt ► obraz třídy i instance ► třída – definovaná za pomocí klíčového slova class ► instance – proměnná typu třída
3
Přiřazování objektů class test { int a,b; public: void fun1(int i, int j){a=i;b=j} void show()(cout << a<< ’ ’<<b<< ”\n”;) }; void main() { test O1,O2; // Vytvoření O1 a O2 (případy třídy test) O1.fun1(5,6); // Vložení hodnot do fun1 (a=5, b=6) O2=O1; // Přiřazení objektů (přiřadí se i data) O1.show(); // Vypíše hodnoty 5 6 O2.show(); // Vypíše hodnoty 5 6 return 0; }
4
Předávání objektů funkcím hodnotou class test { int a; public: test(int i){a=i} int get_a()(return a;) }; int kva_a(test x) // kva_a přebírá argument třídy test { return x.get_a()* x.get_a(); // Provede se kvadrát argumentu } int main() { test a(5),b(6); // a a b jsou případem třídy test cout << kva_a(a)<< ”\n”; // Vypíše číslo 25 cout << kva_a(b)<< ”\n”; // Vypíše číslo 36 return 0; }
5
Předávání objektů funkcím adresou class test { int i; public: test(int n) {i=n;} void set_i(int n) {i=n;} int get_i() {return i;} }; void sqr_it(test *o) { o->set_i(o->get_i() * o->get_i()); //Nastaví o.i na kvadrát. // To ovlivní volající argument. cout get_i(); } // Vypíše se : Hodnota kopie argumentu i je: 25 int main() { test a(5); sqr_it(&a); // Předá adresu a do sqr_it() cout << "a v main()ma po zmene hodnotu: "; cout << a.get_i(); //Vypíše: a v main() ma po zmene hodnotu: 25 return 0; }
6
Vrácení objektů funkcemi class test { char a[100]; public: void show(){cout << a << ”\n”;} void set_a(char *str)(strcpy(a,str);) }; test inp() // návratová funkce typu test { char a[100]; test str; // vytvoří se lokální objekt str cout << “Vloz retezec:”; // načtení řetězce do a cin >> a; str.set(a); // kopie řetězce do str.a return str; //vrácení řetězce do str } int main() { test O1; //O1 je případem třídy test O1=inp(); //přiřazení funkce objektu O1.show(); //vypíše řetězec na obrazovku return 0; }
7
Rozdíl mezi ukazatelem a referencí ► nová možnost v C++ „reference“ ► ukazatele (pointery) chci-li znát přímou hodnotu odkazovanou pointerem, musím jej dereferencovat proto musím vždy vědět, jestli proměnná je ukazatel přiřazením a := b, kde b je ukazatel, dojde ke zkopírování ukazatele. Vzniknou tedy dva ukazatelé na stejné místo ► reference není rozdíl mezí proměnnou s přímou hodnou a její referencí tím pádem není třeba provádět dereference takže přiřazením a := b, kde b je reference, dojde ke zkopírování přímé hodnoty proměnné ► reference nemůže ukazovat na NULL
8
Kopírovací konstruktor (copyconstructor) ► speciální typ konstruktoru, který inicializuje instanci podle jiné instance stejné třídy komplex(const komplex &src) { // kopírovací konstruktor // volá se vždy při předávání hodnoty typu komplex // zkopíruje reálnou i imaginární část this->Re = new int(*src.Re); this->Im = new int(*src.Im); }
9
Použití kopírovacího konstruktoru ► v definici komplex C(1,2), D(C); ► v přiřazení A = B + C je nutné ke kopírovacímu konstruktoru ještě přetížit operátor + a = operátor + sečte B a C a kopírovacím konstruktorem se vytvoří temporary instance X a dále probíhá přiřazení A = X pomocí přetíženého operátoru =
10
Zadání cvičení ► 1. Pomocí tříd sestavte program pro součet a násobení dvou matic A a B s dynamickou alokací paměti ► naprogramujte také kopírovací konstruktor pro inicializaci instance jinou instancí; trida A, B(A); ► program umístěte do samostatného hlavičkového souboru, nakreslete vývojový diagram ► ► použití nového „cout <<“ místo „printf()“ ► použití new a delete ► bodování: funkce (1 bod), rychlost (1 bod), stabilita a délka prog. (1 bod), implementace v hl. souboru (1 bod)
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.