Download presentation
Presentation is loading. Please wait.
Published byΜακεδνός Ζάππας Modified over 6 years ago
1
Default konstruktor struct C{ int i; }; struct D{ D( ):i(1){ }
D(int ii):i(ii){ } void f(){ static C c3; static D d3; cout<<c3.i<<" "<<d3.i<<endl; } C c1; D d1; int main( ){ C c2; D d2; f(); cout<<c1.i<<" "<<c2.i<<endl; cout<<d1.i<<" "<<d2.i<<endl; return 0;
2
Imenovani konstruktori
class Point { friend ostream& operator<<(ostream& out, const Point& p); public: static Point rectangular(float x, float y); static Point polar(float radius, float angle); private: Point(float x, float y); float _x, _y; };
3
Imenovani konstruktori
#include <cmath> Point::Point(float x, float y): _x(x), _y(y) { } Point Point::rectangular(float x, float y) { return Point(x, y); } Point Point::polar(float radius, float angle) { return Point(radius*cos(angle), radius*sin(angle)); ostream& operator<<(ostream& out, const Point& p) out<<"("<<p._x<<“, "<<p._y<<")"; return out;
4
Imenovani konstruktori
int main( ) { Point p1 = Point::rectangular(1.1, 2.3); Point p2 = Point::polar(1.1, 2.3); cout<<p1<<endl; cout<<p2<<endl; return 0; } // (1.1, 2.3) // ( , )
5
Konstruktori i iznimke
class C{ int a; int *p; public: C( ) try : a(0), p(new int(0)){ } catch (const bad_alloc &e){ ….. } }; Napomena: catch hvata iznimke izbačene i iz inicijalizacijske liste i iz tijela konstruktora.
6
Pokazivači na članove klase
class C{ public: int x,y; string s; C(int xx, int yy, const string& ss):x(xx), y(yy), s(ss){} }; void f(const C *objPtr, const C obj, int C::*p){ cout<<objPtr->*p<<" "<<obj.*p; }
7
Pokazivači na članove klase
int main( ){ C o(1,2,"string"); C *ptr=&o; int C::*memberPtr1=&C::x; int C::*memberPtr2=&C::y; string C::*memberPtr3=&C::s; f(ptr, o, memberPtr2); return 0; }
8
Pokazivači na članove klase
int C::*memberPtr1=&C::x; int C::* tip pokazivača na član klase memberPtr ime varijable &C::x inicijalizator
9
Pokazivači na članove klase
int *p=&(ptr->x); // Definicija pokazivača na varijablu tipa int. Sadrži apsolutnu lokaciju varijable u memoriji. int C::*memberPtr1=&C::x; // Definicija pokazivača na član x klase C. Predstavlja relativnu lokaciju, odnosno pomak u odnosu na adresu zadanog objekta. Ne radi se o memorijskoj lokaciji nego o iznosu koji je potrebno dodati na memorijsku lokaciju. To dodavanje se vrši pomoću operatora ->* ili .* . cout<<ptr->*memberPtr1; // Pristupamo lokaciji s adresom ptr i pomičemo se za memberPtr1. cout<<*p<<endl; // Ispisuje isto.
10
Unutarnje klase Klasa može biti definirana unutar neke druge klase i tada govorimo o unutarnjoj ili ugniježđenoj klasi. Definiranjem klase unutar neke druge klase definiramo tip koji je ugniježđen u dosegu okružujuće klase. Objekti unutarnje klase postoje posve neovisno o objektima vanjske klase
11
Unutarnje klase class Outer { public: double x; static int level;
{ public: double x; static int level; enum Boje { plava, crvena, crna}; typedef double Real; class Inner { public: Real y; double f() { return y*y;} };
12
Unutarnje klase int Outer::level = 3; int main( ) {
Outer::Inner a; // Objekt unutarnje klase a.y = 3.0; std::cout << a.f() << std::endl; return 0; }
13
class Out{ int a; class In{ int b; }; int main( ){ Out::In a; }
Unutarnje klase class Out{ int a; class In{ int b; }; int main( ){ Out::In a; }
14
Unutarnje klase class Out{ int a; class In{ int b; }; int main( ){
Out::In a; // greška, tip In je private u klasi Out }
15
Unutarnje klase class Out{ int a; class In{ int b; }; int main( ){
Out::In a; // greška, tip In je private u klasi Out }
16
Unutarnje klase Unutarnja klase je gotovo posve neovisna o vanjskoj klasi, jedino je njeno ime skriveno iza imena vanjske klase. Ipak, vrijedi pravilo da unutarnja klasa može dohvatiti statičke varijable, enumeratore i typedef-ove iz vanjske klase (razina pristupa članovima vanjske klase može ovisiti i o kompilatoru).
17
Unutarnje klase class Outer { public: double x; static int level;
enum Boje { plava, crvena, crna }; typedef double Real; class Inner { public: Real y; Boje g() { return crna; } Real f() { return y*level;} private: static Real z; }; int Outer::level = 3; Outer::Real Outer::Inner::z = 3.14; .
18
inline prvi.cpp inline void f( ){ } void g( ){ } drugi.cpp
void g( ){ } // greška
19
static, extern prvi.cpp int a=1; //globalna varijabla drugi.cpp
void print() { cout<<a; } //greška, a nije deklarirana
20
static, extern prvi.cpp int a=1; //globalna varijabla drugi.cpp
extern int a; void print() { cout<<a; }
21
static, extern prvi.cpp static int a=1; //globalna varijabla drugi.cpp
extern int a; //greška, imamo unutarnje povezivanje za varijablu a void print() { cout<<a; }
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.