Titlul: Mostenire la clase
Scris de: Tudose Bogdan din Aprilie 28, 2010, 16:44:20
Salut, am o problema cu intelegerea mostenirii la clase. Am citit despre ele pe diferite site-uri, dar daca mi-ar putea explica cineva pe exemplul de mai jos ar fi minunat :D Care sunt constructorii care se apeleaza si in ce ordine? #include<iostream> using namespace std; class cls1 { public: int x; cls1(int i=13) { x=i; } }; class cls2: virtual public cls1 { public: cls2(int i=15) { x=i; } }; class cls3: virtual public cls1 { public: cls3(int i=17) { x=i; } }; class cls4: public cls1 { public: cls4(int i=19) { x=i; } }; class cls5: public cls2, public cls3, public cls4 { public: int y; cls5(int i,int j):cls4(i),cls2(j){ y=i+j; } cls5(cls5& ob) { y=-ob.y; }}; int main() { cls5 ob1(-9,3), ob2=ob1; cout<<ob2.y; system("pause"); return 0; } Tuse
Titlul: Răspuns: Mostenire la clase
Scris de: George Popoiu din Aprilie 28, 2010, 17:48:33
Daca vrei sa ai mai mari sanse sa fii ajutat cred ca ar fi bine sa scrii mai clar codul (sa-l indentezi si sa lasi mai multe spatii astfel in cat sa devina mai lizibil)
Titlul: Răspuns: Mostenire la clase
Scris de: Tudose Bogdan din Aprilie 28, 2010, 18:21:33
Scuze :P codul mai clar: #include<iostream.h>
class cls1 { public: int x; cls1(int i=13) { x=i; } };
class cls2: virtual public cls1 { public: cls2(int i=15) { x=i; } };
class cls3: virtual public cls1 { public: cls3(int i=17) { x=i; } };
class cls4: public cls1 { public: cls4(int i=19) { x=i; } };
class cls5: public cls2, public cls3, public cls4 { public: int y; cls5(int i,int j) : cls4(i),cls2(j) { y=i+j; } cls5(cls5& ob) { y=-ob.y; } };
int main() { cls5 ob1(-9,3), ob2=ob1; cout<<ob2.y; return 0; }
Titlul: Răspuns: Mostenire la clase
Scris de: Tataranu Vlad din Mai 08, 2010, 00:04:44
Printre primele chestii pe care le inveti fprintf(stderr,"bla"); cerr << "bla"; Acum codul tau #include<iostream> using namespace std;
class cls1 { public: int x; cls1(int i=13) { fprintf(stderr,"constructor 1\n"); x=i; } };
class cls2: virtual public cls1 { public: cls2(int i=15) { fprintf(stderr,"constructor 2\n"); x=i; } };
class cls3: virtual public cls1 { public: cls3(int i=17) { fprintf(stderr,"constructor 3\n"); x=i; } };
class cls4: public cls1 { public: cls4(int i=19) { fprintf(stderr,"constructor 4\n"); x=i; } };
class cls5: public cls2, public cls3, public cls4 { public: int y; cls5(int i,int j) : cls4(i),cls2(j) { fprintf(stderr,"constructor 5a\n"); y=i+j; } cls5(cls5& ob) { fprintf(stderr,"constructor 5b\n"); y=-ob.y; } };
int main() { cls5 ob1(-9,3), ob2=ob1; cout<<ob2.y; return 0; }
Vezi ce iese ;) Alte chestii: - Header-urile cu .h sunt deprecated si s-ar putea sa nu mai compileze
- Obiectele din iostream si alte headere standard C++ sunt declarate in namespace-ul std
- Chiar merita citit: http://kernel.org/doc/Documentation/CodingStyle
|