You are on page 1of 54

PRINCIPY OOP, ZAPOUZDEN

PA161 Programovn v jazyku C++

PB161 Principy OOP - Zapouzden 23.9.2013

ORGANIZAN - MATERILY
Slidy a pprava
http://cecko.eu/public/pb161_cviceni pro dal tden typicky dostupn v ptek odpoledne
vetn zadn domcho kolu

odpoledne / veer po pednce aktualizovan

Video nahrvky
https://is.muni.cz/auth/el/1433/podzim2013/PB161/um/vi/ do dvou dnu po pednce (automaticky)

Twitter
https://twitter.com/rngsec zveejnn ppravy a slid, obasn info hash tag #pb161_2013 (opravdu dleit vci budou rozeslny hromadn na IS mail)
PB161 Principy OOP - Zapouzden 23.9.2013

VNITROSEMESTRLN TEST 4.11.2013


Posun data na 4.11.2013
v pvodn oznmenm datu je sttn svtek

Forma testovho paprovho odpovdnku


stejn jako v PB071 celkov max. 20 bod 2 termny pro pihlen (14-15, 15-16)

Bude obsahovat npl pedchozch pednek


co udl, vype, zpsob zadan kd

PB161 Principy OOP - Zapouzden 23.9.2013

CO NS DNES EK
Vce o objektovm nvrhu Koncept tdy v syntaxi C++ Princip a implementace zapouzden

PB161 Principy OOP - Zapouzden 23.9.2013

TVORBA SOFTWAROV ARCHITEKTURY


Jde o proces tvorby aplikace Jak rozdlit zadan problm do oddlench st? Jak definovat rozhran mezi tmito stmi? Jak definovat rozhran mezi aplikac a okolm? Jak definovat komunikaci mezi stmi? Jak to vechno sprvn naprogramovat? Existuje vce pstup, OOP jednm z nich

PB161 Principy OOP - Zapouzden 23.9.2013

OBJEKTOV ORIENTOVAN PROGRAMOVN


Programovac styl
pro zven robustnosti, udrovatelnosti a roziovatelnosti kdu

Centrovno kolem mylenky objektu


kombinace dat (atribut) a funkc (metod) pro prci s nimi umouje logicky svzat data a funkce, kter s nimi pracuj

Objekt je do jist mry autonomn


obsahuje ve, co potebuje ke sv innosti s vjimkou interakce s ostatnmi objekty nap. konkrtn lovk v rmci lidsk spolenosti
6

PB161 Principy OOP - Zapouzden 23.9.2013

OBJEKTOV ORIENTOVAN PROGRAMOVN (2)


Tento styl programovn poskytuje
ochranu st kdu a dat (zapouzden) minimalizaci duplicity (ddinost) silnou typovost s roziitelnost (polymorfismus)

Pm podpora v syntaxi nkterch jazyk


ist OOP jazyky (Smalltalk) vs. smen (C++)

PB161 Principy OOP - Zapouzden 23.9.2013

STRUKTUROVAN PSTUP K EEN PROBLMU


Nap. klasick C (ale pod mono i v C++) Pemlme o funkcch, kter maj vstup a vstup Kroky pi vvoji:
Abstrakce navrhujeme procesy, kter e problm Dekompozice rozdlme procesy do mench podst (funkc) Propojen implementujeme funkce a jejich vzjemn voln

Nejprve definujeme procesy a datov struktury Pot definujeme sadu funkc realizujc proces a pracujcch s datovmi strukturami
8

PB161 Principy OOP - Zapouzden 23.9.2013

OBJEKTOV ORIENTOVAN PSTUP K EEN


Nap. OOP v C++ Pemlme o objektech, kter mezi sebou interaguj Kroky pi vvoji:
Abstrakce navrhujeme nezvisl entity, kter spolupracuj Dekompozice rozdlme problm na objekty zodpovdn za realizaci entit Propojen vytvome potebn mnostv objekt a nechme je interagovat

Nejprve definujeme chovn a vlastnosti objekt Pot vytvome jejich instance a nechme je spolupracovat (volaj sv metody)
9

PB161 Principy OOP - Zapouzden 23.9.2013

MAPOVN OOP NA C++

objekt ~ instance C++ tdy zprva ~ voln metody metoda ~ lensk funkce parametry zprvy ~ parametry metody stav ~ hodnoty atribut

10

PB161 Principy OOP - Zapouzden 23.9.2013

TDY V C++
Zaloeno na konceptu td a objekt Analogie se struct z C, ale s vtmi monostmi
struktura doplnn o metody, ktermi me sv data manipulovat

Tda
podklad pro vytvoen objektu (al struct XY) atributy (data) a metody (implementace funkce) nap. vkresy pro koda Octavia

Objekt
instance tdy (al promnn typu struct XY) me bt vce objekt z jedn tdy (~ vce struktur typu XY) m svj stav (hodnoty atribut) a definovan chovn (metody) nap. konkrtn auto koda Octavia s SPZ BMZ-4523
PB161 Principy OOP - Zapouzden 23.9.2013

11

UIVATELSK DATOV TYP TDA - CLASS


Nov v C++, ale hodn podobnost s C struct Atributy
datov poloky v rmci tdy stejn jako u struct, ale nejsou z venku viditeln pstup pomoc speciln metody (getter/setter) nebo zmna prv

Tvorba instance tdy (objekt)


stejn jako u struct (instance tdy X == promnn s typem X) lze inicializovat pi vytven instance (tzv. konstruktor)

Monosti manipulace stejn jako u struct


COctavia autoBMZ4523; COctavia* pAutoBMZ4523 = &autoBMZ4523;
PB161 Principy OOP - Zapouzden 23.9.2013

12

UKZKA SYNTAXE CLASS VS. STRUCT V C


struct Mouse { int size; Class je vylepen struct }; int feed(Mouse* pMouse, unsigned int foodAmount)class { CMouse { if (pMouse) { int m_size; pMouse->size += foodAmount / 10; public: return pMouse->size; CMouse(int initialSize) { } m_size = initialSize; Speciln metoda pro inicializaci else return -1; } }; int feed(unsigned int foodAmount){ Funkce feed je pmo soust tdy m_size += foodAmount / 10; nen nutn dvat jako parametr int feedMouseDemo() { return m_size; struct Mouse mouse1; } struct Mouse mouse2; }; int feedMouseDemo() { mouse1 a mouse2 jsou objekty tdy CMouse CMouse mouse1(10); mouse1.size = 10; CMouse mouse2(50); mouse2.size = 50; mouse1.feed(100); 13 feed(&mouse1, 100); mouse2.feed(30); feed(&mouse2, 30); return 0; return 0; } PB161 Principy OOP - Zapouzden 23.9.2013 }

UIVATELSK DATOV TYP TDA CLASS (2)


Konstruktor, destruktor
metoda automaticky volan pi vytven resp. ruen objektu (detaily pozdji)

Deklaraci lze oddlit od definice


deklarace v hlavikovm souboru (*.h) definice (implementace) ve zdrojovm souboru (*.cpp)

Dopedn deklarace s neplnm typem


stejn jako u struct class CMouse; CMouse mus bt pozdji dodefinovna (jinak chyba pi linkovn)
14

PB161 Principy OOP - Zapouzden 23.9.2013

PIPOMENUT
Tda je podklad pro tvorbu objekt Objekt je pamov instance tdy Tda obsahuje datov atributy a metody pro prci s nimi
Atribut m_size Tda CMouse

Metoda feed Objekt mouse1

15

PB161 Principy OOP - Zapouzden 23.9.2013

METODA TDY
Metoda tdy je funkce (stejn syntaxe i chovn) Metoda tdy typicky pracuje s vnitnm stavem
te/modifikuje atributy

Metoda tdy m vdy jeden skryt argument


nult argument ukazatel na instanci tdy, jej metoda se vol
class + metoda struct + funkce
struct Mouse { int size; }; int feed(Mouse* pMouse, int foodAmount) { pMouse->size += foodAmount / 10; return pMouse->size; } class CMouse { int m_size; int feed(int foodAmount){ m_size += foodAmount / 10; return m_size; } 16 };

skryt parametr this


PB161 Principy OOP - Zapouzden 23.9.2013

UKAZATEL THIS
Ukazatel na aktuln objekt
this->m_size;

class CTest { int value; public: int getValue2() const { int value = 1; return value; } };

Automaticky jako parametr metod tdy


nen explicitn deklarovn v hlavice metody je ale dostupn pro pouit

Pouit pi konfliktu atributu tdy a parametru metody


parametr metody m stejn jmno jako vnitn atribut

Pouit pro test piazen sebe sama


u piazovacch opertor (viz. pozdji)

Pouit pro monost etzen pkaz


u piazovacch opertor (viz. pozdji)
17

PB161 Principy OOP - Zapouzden 23.9.2013

UKAZATEL THIS - UKZKA


class CTest { int value; problm s public: rozlienm CTest() : value(0) {} int getValue() const { int value = 1; // local variable return value; // What will be returned? 1 or 0? } rozlien int getValue2() const { pomoc this int value = 1; return this->value; // Use this to distinguish } void testSame(const CTest& test) const { #include <iostream> if (&test == this) cout << "Same" << endl; using std::cout; else cout << "Different" << endl; using std::endl; } int main() { }; CTest test; cout << test.getValue() << endl; cout << test.getValue2() << endl; CTest test2; test.testSame(test2); test.testSame(test); return 0; }

testovn sebe sama

18

PB161 Principy OOP - Zapouzden 23.9.2013

DEKLARACE VS. DEFINICE


Deklarace zavd nov jmno entity do programu
typicky v hlavikovm souboru (*.h)

Definice poskytuje uniktn popis (implementaci) entity


funkce, typ, tda, instance... typicky ve zdrojovm souboru (*.cpp)

Jen jedna definice (implementace), mono vce deklarac Deklarace me bt zrove definice
nap. deklarace metody pmo doplnn jejm tlem

19

PB161 Principy OOP - Zapouzden 23.9.2013

UKZKA TDY ROZDLEN DO H A CPP


mouse.h
#ifndef MOUSE_H #define MOUSE_H

deklarace i definice

class CMouse { int m_size; public: CMouse(); int getSize() const { return m_size; } import deklarac bool feed(const unsigned int foodAmount); private: bool increaseSize(const unsigned int foodAmount); }; #include "mouse.h" CMouse::CMouse() { #endif // MOUSE_H definice m_size = 10; } bool CMouse::feed(const unsigned int foodAmount) { deklarace deklarace // Check basic limits of foodAmount if (foodAmount > 0 && foodAmount < 100) { return increaseSize(foodAmount); } else return false; } bool CMouse::increaseSize(const unsigned int foodAmount 20) { m_size += foodAmount / 10; return true; definice } PB161 Principy OOP - Zapouzden 23.9.2013

mouse.cpp

ZAMYLEN: CO JE VLASTN VECHNO TDA?


Whats in a class? The Interface Principle
http://www.gotw.ca/publications/mill02.htm

Tda nen jen to, co je obsaeno v jej definici


tj. nejen obsah class {}

Tda jsou i voln funkce pracujc s danou tdou


pouze ty obsaen v hlavikovm souboru definujcm tdu pedpis jak se m dan tda vyuvat tvrce tdy vytv cel *.h soubor
PB161 Principy OOP - Zapouzden 23.9.2013

21

KONSTRUKTOR

22

PB161 Principy OOP - Zapouzden 23.9.2013

KONSTRUKTOR - MOTIVACE
Motivace: Nae tda m nkolik atribut
Jak bude jejich hodnota pi vytvoen objektu?
class CExampleClassDefConstructor { int m_atrib; public: int getAtrib() const { return m_atrib; } }; int main() { // Invoke default constructor CExampleClassDefConstructor object1; cout << "object1::m_atrib = " << object1.getAtrib() << endl; // ??? return 0; }

vtinou neinicializovan => nepjemn

Monm eenm je speciln metoda clean()


ale zbyten voln hned po vytvoen objektu

C++ nabz elegantn een - konstruktor


PB161 Principy OOP - Zapouzden 23.9.2013

23

KONSTRUKTOR
Metoda, kter je automaticky volna pi vytven objektu Zajist, e objekt bude od zatku v konzistentnm stavu
meme inicializovat atributy na defaultn hodnotu meme je nastavit na speciln hodnoty meme otevt spojen na server

Konstruktor me mt argumenty a me bt peten


inicializace uivatelem zadanmi hodnotami vce konstruktor s rznmi argumenty (peten, vce pozdji)
24

PB161 Principy OOP - Zapouzden 23.9.2013

KONSTRUKTORY - SYNTAXE
class CExampleClass { int m_atrib1; int m_atrib2;

jmno metody jako tda

bez nvratov hodnoty

public: CExampleClass(); // Constructor with no parameters CExampleClass(int atribute1); // Constructor with one parameter CExampleClass(int atribute1, int atribute2);// Constructor with two parameters int getAtrib1() const { return m_atrib1; int getAtrib2() const { return m_atrib2; }; } }

Deklarace konstruktor s 0, 1 a 2 parametry

Voln konstruktor

CExampleClass::CExampleClass() { m_atrib1 = 0; m_atrib2 = 0; }

Implementace konstruktor

CExampleClass object2; CExampleClass object3(10); CExampleClass object4(10, 15);

CExampleClass::CExampleClass(int atribute1) { m_atrib1 = atribute1; m_atrib2 = 0; } CExampleClass::CExampleClass(int atribute1, int atribute2) { m_atrib1 = atribute1; m_atrib2 = atribute2; 25 }

PB161 Principy OOP - Zapouzden 23.9.2013

DEFAULTN KONSTRUKTOR
Co kdy nen definovn dn konstruktor?
automaticky existuje defaultn konstruktor nem dn argumenty a neinicializuje atributy CClass object;

Definovnm uivatelskho konstruktoru se odstran defaultn konstruktor bez argument


pokud chceme konstruktor bez parametr, musme ho znova definovat tzv. bezparametrick konstruktor

V C++ se bezparametrick konstruktory se volaj pouze pro tdy a struktury


pro nativn (built-in) typy se nevol nic
PB161 Principy OOP - Zapouzden 23.9.2013

26

KONSTRUKTOR INICIALIZAN SEKCE


Inicializan sekce konstruktoru
inicializace atribut pedn parametr pro konstruktor rodie
class X { int m_atrib1; int m_atrib2; public: X(int atrib1) : m_atrib1(atrib1), m_atrib2(1) {} };

class Y : public X { public: Y() : X(33) {} };

Preferujte inicializan sekci ped piazenm


nelze jinak pedat argumenty pro konstruktor pedka nelze jinak inicializovat atributy s referennm typem nemus se vytvet lokln kopie argument
PB161 Principy OOP - Zapouzden 23.9.2013

27

KOSTRUKTORY - UKZKA
constructorDemo.cpp pouit konstruktoru neinicializovan promnn defaultn konstruktor konstruktor s argumenty peten konstruktoru

28

PB161 Principy OOP - Zapouzden 23.9.2013

BEZPARAMETRICK KONSTRUKTOR A C++11


Co znamen CClass object();

Nelze deklarovat, je to povaovno za deklaraci funkce object bez argument vracejc CClass V C++11 dolo ke sjednocen syntaxe CClass object{}; // default constructor int i{}; // default ctor, i==0
29

PB161 Principy OOP - Zapouzden 23.9.2013

C++11 DEFAULT A DELETE


Soust td obecn je nkolik dleitch metod
Bezparametrick kontruktor Koprovac konstruktor detaily Move konstruktor detaily na konci semestru Piazovac opertor

Lze definovat, e nkter z tchto metod je defaultn (default) nebo zakzan (delete)
class CClass { public: CClass() = default; CClass &operator=( CClass ) = delete; };
PB161 Zapouzden... 24.9.2011 30/51

C++11 INICIALIZAN SEZNAM


Je zaveden monost pouit inicializanho seznamu
Pomoc sloench zvorek je mon tak vytvet instance i pes jin konstruktor
#include <initializer_list> #include <algorithm> class MyClass { int *data; public: // inicializacn seznam se bere vdy hodnotou MyClass( std::initializer_list< int > l ) : data( new int[ l.size() ] ) { std::copy( l.begin(), l.end(), data ); } }; MyClass object{1, 2, 3, 4, 5, 42, 1001}; PB161 Zapouzden... 24.9.2011 31/51

ZAPOUZDEN

32

PB161 Principy OOP - Zapouzden 23.9.2013

PRO JE VHODN ZAPOUZDEN


struct Point { int x, y; void Draw() {...} }; int main(void) { Point myPoint; myPoint.x = 10; myPoint.y = 20; myPoint.Draw(); return 0; }
class CPoint { int m_x, m_y; public: void setPoint(int x, int y) { m_x = x; m_y = y; } void Draw() {...} }; int main(void) { CPoint myPoint2; myPoint2.setPoint(10, 20); myPoint2.Draw(); }

33

PB161 Principy OOP - Zapouzden 23.9.2013

ZAPOUZDEN ZMNA ZADN


Nai tdu u nkdo pouv, ed kd z minulho slidu je velmi nepraktick/nemon mnit Zmna zadn: body v 3D Zmna zadn: int nepostauje pro zachycen rozsahu souadnice
zmna typu u x a y na float? zmna typu u x a y na etzec? zmna typu u x a y na BigInt?

Jak vidte dsledky pro pedchoz kd? Zapouzdenm omezujeme viditelnost vnitnho stavu
meme lpe kontrolovat interakce se stavem (setter) meme mnit reprezentaci stavu
PB161 Principy OOP - Zapouzden 23.9.2013

34

JAK POZNAT, KTER KOMPONENTA JE VCE ZAPOUZDEN?


Stupe zapouzden komponenty je nepmo mrn mnostv ostatnho kdu, kter pestane fungovat, pokud komponentu zmnme Metrika zapouzden: poet funkc, kter mohou vyadovat zmnu nsledkem zmny komponenty Pokud zmnme u Point datov typ promnnch na string, pestane fungovat ed kd U CPoint zmnme datov typ a upravme pslun

setPoint()
pro nov aplikace vyadujc vt pesnost pidme dal metodu setPoint()s jinmi argumenty ed kd zstane fungovat!
void setPoint(int x, int y) { m_x = convertToString(x); m_y = convertToString(y); }
35

PB161 Principy OOP - Zapouzden 23.9.2013

ZAPOUZDEN V C++
C++ poskytuje nstroje pro zapouzden dat
ale umouje i poruit (tj. pm pstup)

Realizovno prostednictvm pstupovch prv


k atributm k metodm

Zkladn pstupov prva


public vichni mohou st/modifikovat/pouvat private nikdo krom vlastn tdy neme st nebo pmo pouvat protected, friend specializovanj (pozdji)
36

PB161 Principy OOP - Zapouzden 23.9.2013

SYNTAXE PSTUPOVCH PRV


Struktura
zmna z public na private

Tda
zmna z private na public

37

PB161 Principy OOP - Zapouzden 23.9.2013

PSTUPOV PRVA
Prvo plat, dokud nen nastaveno jin
viz. pedchoz ukzka kdu

struct je to sam jako class, rozdl prv v defaultnch prvech struct v C++ m vechny poloky defaultn public
z dvodu zptn kompatibility s C lze penastavit na private

class v C++ m vechny poloky defaultn private


ponechte pro atributy private je nutn explicitn nastavit public pro veejn metody
38

PB161 Principy OOP - Zapouzden 23.9.2013

PSTUPOV PRVA - PUBLIC


K poloce s prvem public m pstup kdokoli
atribut me bt ten a mnn kmkoli metoda me bt volna zven

Jako public typicky neoznaujeme atributy


podporujeme zapouzden

Jako public oznaujeme metody, kter jsou soust rozhran


deklarace existujcch public metod by se nemly mnit nkdo je nejsp pouv implementaci mnit meme (tlo je skryto)
39

PB161 Principy OOP - Zapouzden 23.9.2013

PSTUPOV PRVA - PRIVATE


K poloce s prvem private m pstup pouze sama tda
atribut nebo metoda neme bt pouit/volna zven vjimkou je objekt/metoda s prvem friend (viz. pozdji) pokus o pouit metody definovan jako private vyvol chybu u bhem pekladu

Jako private oznaujeme typicky vechny atributy


podporujeme zapouzden

Jako private oznaujeme metody, kter nejsou soust rozhran


nechceme, aby na nich nkdo zvisel
40

PB161 Principy OOP - Zapouzden 23.9.2013

PSTUPOV PRVA - UKZKA


accessRightsDemo.cpp deklarace veejnch a privtnch atribut rozdly class vs. struct chyby pekladae
pstup k privtnmu atributu pstup k privtn metod

41

PB161 Principy OOP - Zapouzden 23.9.2013

PRO ZAMYLEN: NELENSK METODY PRO ZLEPEN ZAPOUZDEN?


lensk metody (nap. setter) zlepuj zapouzden oproti situaci s pmo pstupnmi atributy Mohou nelensk metody tak zlepit zapouzden? Metrika zapouzden: poet funkc, kter mohou vyadovat zmnu po zmn komponenty
struct veker kd, kter struct pouv class vechny lensk metody (N) zmna jedn lensk metody na nelenskou => N - 1

Pozor, tk se jen nelenskch ne-friend funkc


tj. funkce, kter pro svoje vykonn vyuij pouze veejn metody tdy

Pete si: How non-member functions improve encapsulation (Scott Meyers)


http://www.drdobbs.com/cpp/how-non-member-functions-improveencapsu/184401197
PB161 Principy OOP - Zapouzden 23.9.2013

42

ZAPOUZDEN A DELEGACE POADAVK


Me-li tda vykonat kol, je ji byl zadn, vykon jej, jinak jej deleguje tomu, kdo m zodpovdnost za vykonvan danho kolu Tda nem zjiovat informace (kter by mly nejlpe zstat zapouzden) od jinch td ve snaze se na jejich zklad se rozhodnout jak kol provst Danou zleitost m rozhodnout a provst tda, kter poadovan informace pat

43

PB161 Principy OOP - Zapouzden 23.9.2013

ZAPOUZDEN KLOV SLOVO CONST

44

PB161 Principy OOP - Zapouzden 23.9.2013

KLOV SLOVO CONST


Zavedeno pro zven robustnosti kdu proti nezmrnm implementanm chybm Motivace 1:
potebujeme oznait promnnou, kter nesm bt zmnna typicky konstanta, nap. poet msc v roce

Motivace 2:
chceme deklarovat, e nae funkce nebude mnit vstupn parametr pestoe by mohla (nap. pedn referenc)

A chceme mt kontrolu pmo od pekladae!


45

PB161 Principy OOP - Zapouzden 23.9.2013

KLOV SLOVO CONST (2)


Explicitn vyznaujeme promnnou/objekt, kter nebude mnna
jej hodnota (nebo hodnota atribut) by nemla bt mnna argument, kter nem bt ve funkci mnn

Explicitn oznaujeme funkci, kter me bt volna i na konstatnm objektu


protoe nebude mnit jeho vnitn stav je kontrolovno pi pekladu!

Lze mt dv identick funkce lic se pouze v const


funkce s const m ni prioritu, pouije se pouze pokud bude argument tak const nap. begin() a end() u STL kontejner
PB161 Principy OOP - Zapouzden 23.9.2013

46

KLOV SLOVO CONST (3)


Pouvejte co nejastji
zlepuje typovou kontrolu a celkovou robustnost kontrola e omylem nemnme konstantn objekt umouje lep optimalizaci pekladaem

Promnn s const jsou lokln v danm souboru Pozor na const int a, b = 0;


radji kad promnn na samostatnm dku

47

PB161 Principy OOP - Zapouzden 23.9.2013

KLOV SLOVO CONST - UKZKA


const promnn const argument const metoda chyby pekladae

48

PB161 Principy OOP - Zapouzden 23.9.2013

KLOV SLOVO CONST - PROMNN


#include <iostream> using namespace std;

promnn b nen const

void konstConstantDemo() { konstanty nelze //const int a, b = 0; // error, uninitialized const 'a' const int numMonthsInYear = 12; dodaten mnit cout << "Number of months in year: " << numMonthsInYear << endl; //numMonthsInYear = 13; // error, assignment of read-only variable } char* konstReturnValueDemo() { return "Unmodifiable string"; } const char* konstReturnValueDemo2() { return "Unmodifiable string"; } explicitn ozname etzec int main() { char* value = konstReturnValueDemo(); value[1] = 'x'; // read-only memory write - problem

vracme etzec (konstantn)

jako nemodifikovateln

zde se jej ale sname modifikovat chyba za bhu

char* value2 = konstReturnValueDemo2(); // error: invalid conversion return 0; }

problm ohls u peklada 49

PB161 Principy OOP - Zapouzden 23.9.2013

KLOV SLOVO CONST - METODY


class CMouse { int m_size; public: void setSize(int newSize) { m_size = newSize; } int getSize() const { return m_size; } };

metoda setSize() neme bt konstantn (mn vnitn stav)

void konstFunctionDemo() { CMouse mouse1; //const CMouse mouse2; // error: uninitilized const mouse2 const CMouse* pMouse2 = &mouse1; mouse1.getSize() ; mouse1.setSize(10); cout << pMouse2->getSize() << endl;

metodu getSize() ozname jako volatelnou i nad konstatnm objektem

vytvome si konstantn ukazatel na objekt

// Let's try to call non-constant method of constant object //pMouse2->setSize(10); // error: no matching function for call }

nememe volat nekonstantn metodu konstantnho objektu


PB161 Principy OOP - Zapouzden 23.9.2013

50

VPIS NA STANDARDN VSTUP


Z C znte printf("Dnes je %d. zari", den); V C++ na vstup zapete takto:
Opertor << poskytuje objektu cout etzcovou reprezentaci argumentu tsn za nm

Analogie <stdio.h>

Standardn vstup je objekt cout

Prci se standardnm vstupem budeme dlat detailnji v 4. pednce


51

PB161 Principy OOP - Zapouzden 23.9.2013

SHRNUT
Konstruktor je metoda pro inicializaci objektu
pozor na defaultn konstruktor

Zapouzden skrv vnitn data a logiku


umouje abstrahovat uivatele od aktuln implementace

Pouvejte co nejastji const


seln konstanty parametry funkce/metody, cel metoda

52

PB161 Principy OOP - Zapouzden 23.9.2013

ZDROJE
StackOverflow Q&A C++ FAQ Odpovdi na ato kladen otzky. cplusplus.com Dokumentace C++ a standardn knihovny. cppreference.com Dokumentace C++ a standardn knihovny, obsahuje i dokumentaci k C++11. C++ Coding Standards 101 Rules, Guidelines, and Best practices Effective C++ 55 Specific Ways to Improve Your Programs and Designs Exceptional C++ 47 Engineering Puzzles, Programming Problems, and Solutions Modern C++ Generic Programming and Design Patterns Applied
PB161 Principy OOP - Zapouzden 23.9.2013

53

BONUS

54

PB161 Principy OOP - Zapouzden 23.9.2013

You might also like