Presentation is loading. Please wait.

Presentation is loading. Please wait.

Default konstruktor struct C{ int i; }; struct D{ D( ):i(1){ }

Similar presentations


Presentation on theme: "Default konstruktor struct C{ int i; }; struct D{ D( ):i(1){ }"— Presentation transcript:

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; }


Download ppt "Default konstruktor struct C{ int i; }; struct D{ D( ):i(1){ }"

Similar presentations


Ads by Google