infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Tudose Bogdan din Aprilie 28, 2010, 16:44:20



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?

Cod:
#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:

Cod:
#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
Cod:
fprintf(stderr,"bla");
cerr << "bla";

Acum codul tau
Cod:
#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