diff --git a/teoria/classi/a.out b/teoria/classi/a.out new file mode 100755 index 0000000..bda8eae Binary files /dev/null and b/teoria/classi/a.out differ diff --git a/teoria/classi/constructorStack.cpp b/teoria/classi/constructorStack.cpp new file mode 100644 index 0000000..bbf710d --- /dev/null +++ b/teoria/classi/constructorStack.cpp @@ -0,0 +1,51 @@ +#include +using namespace std; +class A{ +public: + int x; + A(){ + cout<<"Sono nel costruttore di A"< +using namespace std; + +void problema(); +void soluzione(); + +int main(){ + //problema(); + soluzione(); + return 0; +} + +void problema(){ + class A{ + public: + int* v = new int[10]; + ~A(){ + cout<<"Richiamato distuttore di A"< +class ClassName{ +private: + int y = 5; +public: + int x = 3; + + int aggiungiX(int); // dichiarazione funzione + + int aggiungiY(int); // dichiarazione funzione + friend int aggiungiY(int); // dichiarazione friendship +}; +/* + NB: in questo caso x deve essere dichiarata pubblica. Se fosse stato un metodo + all'interno della classe allora avrebbe potuto avere accesso anche se x + fosse stata privata +*/ +int ClassName::aggiungiX(int parametro){ + x+=parametro; +} +/* + Oppure si può dichiarare la friendship per accedere a variabili private/protette +*/ +int ClassName::aggiungiY(int parametro){ + y+=parametro; + std::cout< +using namespace std; + +/* + ereditarietà a diamante: + A <-- B + A <-- C + B <-- D + C <-- D +*/ + +class A{ + public: + int a; + A(){ + cout<<"A created"< +using namespace std; +/* + ereditarietà a diamante: + A <-- B + A <-- C + B <-- D + C <-- D +*/ + +void nonVirtualInheritance(); +void virtualInheritance(); +int main(){ + //nonVirtualInheritance(); + virtualInheritance(); + return 0; +} + +void nonVirtualInheritance(){ + class A{ + public: + int size = 7; + }; + + class B : public A{ + public: + int b; + }; + + class C : public A{ + public: + int c; + }; + + class D : public B, public C{ + public: + int d; + }; + + /* + Adesso B ha una copia di A, C ha una copia di A, D ha una copia di B e una + copia di C. Implica che D ha due copie di A. + Se provo a stampare size, cosa succede? + */ + D obj; + //cout< +using namespace std; +class A{ +private: + int a = 1; +protected: + int b = 2; +public: + int c = 3; + int sameVariable = 4; +}; + +class B : A{ +public: + int sameVariable = 9; + void test(){ + //cout<