Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Mostenire la clase  (Citit de 1637 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
tuse
Strain


Karma: -10
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« : 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  Very Happy

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
Memorat
popoiu.george
Vorbaret
****

Karma: 19
Deconectat Deconectat

Mesaje: 162



Vezi Profilul
« Răspunde #1 : 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)
Memorat
tuse
Strain


Karma: -10
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #2 : Aprilie 28, 2010, 18:21:33 »

Scuze  Tongue 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;
}
« Ultima modificare: Aprilie 28, 2010, 19:05:46 de către Andrei Grigorean » Memorat
tvlad
De-al casei
***

Karma: 63
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #3 : 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 Wink

Alte chestii:
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines