[C++] interro théorique 2eG

Voir le sujet précédent Voir le sujet suivant Aller en bas

[C++] interro théorique 2eG

Message  Zahra le Dim 28 Déc 2008, 10:57

Bonjour à tous,
Je refais une interrogation de l'an passé en C++ et il y'a 3 codes pour lesquels je ne trouve pas de réponses. Un peu d'aide me serais bien utile Smile

1er code:
Code:
#include <iostream.h>
int parDefaut ( int a, int b, int c=5 );
int main()
{
int res = parDefaut(1);
cout << res << endl;
return 0;
}
int parDefaut ( int x, int y, int z )
{ return x+y+z ; }

2e code:
Code:
#include <iostream.h>
struct Truc
{
unsigned short us ;
public :
Truc( unsigned short i = 3 ) : us(i) { }
unsigned short get() { return us; }
} ;
int main()
{
Truc * t = new Truc() ;
cout << t.get() + t.us << endl ;
return 0 ;
}

et enfin 3e code:
Code:
#include <iostream.h>
class Base
{
protected : int basePro;
public : Base () { basePro = 5; }
};
class Derive : public Base
{
private : int derivePri;
public : Derive () { derivePri = 20 ; }
int getVal()
{
Base b;
int val = derivePri;
val += b.basePro;
return val;
}
};
int main ()
{
Derive derive;
cout << derive.getVal() << endl;
return 0;
}

Merci d'avance à ceux qui pourront m'aider

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  SK le Dim 28 Déc 2008, 11:33

Bonjour à toi aussi.


*de mémoire, sans avoir relu le cours*

1er code:
Code:
#include <iostream.h>
int parDefaut ( int a, int b, int c=5 );
int main()
{
Code:
int res = parDefaut(1);

Code:
cout << res << endl;
return 0;
}
int parDefaut ( int x, int y, int z )
{ return x+y+z ; }

Refus du compilateur: "il n'y a pas assez d'arguments pour la fonction parDefaut(int, int)", ou "la fonction parDefaut(int) est manquante", mais je pense plutôt que c'est la première erreur

2e code:
Code:
#include <iostream.h>
struct Truc
{
unsigned short us ;
public :
Truc( unsigned short i = 3 ) : us(i) { }
unsigned short get() { return us; }
} ;
int main()
{
Truc * t = new Truc() ;
Code:
cout << t.get() + t.us << endl ;

Code:
return 0 ;
}

Refus du compilateur: On essaie d'accéder des éléments d'une struct de façon "directe" or que t est un pointeur. Notation correcte: t->get() + t->us

et enfin 3e code:
Code:
#include <iostream.h>
class Base
{
protected : int basePro;
public : Base () { basePro = 5; }
};
class Derive : public Base
{
private : int derivePri;
public : Derive () { derivePri = 20 ; }
int getVal()
{
Base b;
int val = derivePri;
val += b.basePro;
return val;
}
};
int main ()
{
Derive derive;
cout << derive.getVal() << endl;
return 0;
}

Ça je ne m'en rappelle plus... j'ai envie de dire exécution normale et affichage "25", car je me dis que puisque Derive "EST UN" Base, il a accès aux éléments protected de Base. Mais si je suis encore en 2ième c'est qu'il y a une raison, donc à prendre avec des pincettes ^^
Ce sont des règles bien spécifiques à l'accès en private, protected et public ; je ne sais pas si on a déjà vu ça en cours.



DIS, au fait, si y'a quelque chose où tu hésites dans le code dis-le-nous aussi, parce que parfois c'est plus dur de distinguer ce qui est vraiment correct pour du vrai de vrai de ce qui est erroné...


Dernière édition par SK le Dim 28 Déc 2008, 11:46, édité 2 fois

SK

Nombre de messages : 221
Age : 29
Prénom : Sébastien
Statut : ancien
Localisation : Braine-l'Alleud
Date d'inscription : 12/12/2006

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Morbid le Dim 28 Déc 2008, 11:42

Je confirme pour la 1 et la 2 :

1) pas assez d'argument il en faut minimum 2
2) bein t c'ets un pointeur de Truc donc t-> et pas t.

Pour en être sur il suffit de compiler les codes Razz

Morbid

Nombre de messages : 894
Age : 30
Prénom : Christophe
Statut : Ancien (R)
Date d'inscription : 23/11/2006

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  nvs le Dim 28 Déc 2008, 12:41

Morbid a écrit:Pour en être sur il suffit de compiler les codes Razz
je confirme Smile








_________________

nvs

Nombre de messages : 5238
Age : 43
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Dim 28 Déc 2008, 12:50

oui, j'ai compiler, je constate bien qu'il a des erreurs, ms je ne parviens pas toujours à expliquer le pourquoi...
donc pour le 3e code que j'ai mis je vois bien qu'il y a une erreur, mais pourquoi?

et merci SK pour les 2 premiers Smile

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  SK le Dim 28 Déc 2008, 12:56

De rien Very Happy

Il te marque quoi exactement comme erreur dans le Log ?

SK

Nombre de messages : 221
Age : 29
Prénom : Sébastien
Statut : ancien
Localisation : Braine-l'Alleud
Date d'inscription : 12/12/2006

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  nvs le Dim 28 Déc 2008, 13:15

Base n'est pas un Derive, donc Derive ne peut accéder à l'attribut protégé (basePro) de b dans Derive::getVal(). notez que par contre, Derive peut accéder à l'attribut protégé (basePro) d'un autre Derive. pour vous en convaincre, remplacez Base par Derive dans la déclaration de la variable b dans Derive::getVal().







_________________

nvs

Nombre de messages : 5238
Age : 43
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  smb le Dim 28 Déc 2008, 14:26

Je signale à mes étudiants "distraits" de 2ième informatique de gestion que la matière relative à l'héritage en C++ n'a pas encore été abordée et qu'elle ne figure donc pas comme matière pour l'interrogation de janvier !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Trusty le Dim 28 Déc 2008, 14:52

le problème de base et dérive n'en n'est donc pas un ....

Trusty

Nombre de messages : 866
Age : 29
Prénom : Bastien
Statut : old 2010
Localisation : Ath
Date d'inscription : 30/10/2006

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Dim 28 Déc 2008, 15:09

OK,
problème donc résolu Very Happy
merci à tous pour vos réponses

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Lun 05 Jan 2009, 16:13

Bonjour à tous, j'ai encore une petite question.
dans la même interro, pour le code 6
Code:
#include <iostream.h>
int main()
{
int tab[] = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };
char * ptrChar = (char *)&tab[0];
ptrChar = ptrChar + sizeof(int);
cout << *(int *)ptrChar << endl;
return 0;
}

il affiche 2, tester sous C::B, mais je ne comprend pas pourquoi, car pour moi sizeof(int) vaut 4, donc il devrait avancer de 4 et non pas de 1... et donc m'afficher 5???
quelqu'un pourrait-il m'éclairer?

merci d'avance

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  nvs le Lun 05 Jan 2009, 16:18

Zahra a écrit:il affiche 2, tester sous C::B, mais je ne comprend pas pourquoi, car pour moi sizeof(int) vaut 4, donc il devrait avancer de 4 et non pas de 1... et donc m'afficher 5???
quelqu'un pourrait-il m'éclairer?

merci d'avance
la réponse à ta question est issue de la réponse à la question suivante : tu dis qu'il devrait avancer de 4, c'est correct, mais de 4 quoi ?









_________________

nvs

Nombre de messages : 5238
Age : 43
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Lun 05 Jan 2009, 16:32

oooh oui, ok... je vois
donc, g un tableau d'entier, g un ptr char, je lui d'avancer de la taille d'un entier (donc 4 octets) ms ac un pt char, ms un entier c'est 4 octet, donc j 'avance que de 1.
C'est quelque chose comme ca...

Merci pour la réponse

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Morbid le Lun 05 Jan 2009, 16:41

Oui c'est ca Wink

Donc tu avance de 4 bytes donc tu arrive sur le premier byte du 2eme élément du tableau (vu que chaque élément fait 4 bytes) ... et comme à l'affichage le pointeur est bien casté tu as le 2eme élément qui est affiché ...

Morbid

Nombre de messages : 894
Age : 30
Prénom : Christophe
Statut : Ancien (R)
Date d'inscription : 23/11/2006

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Mer 07 Jan 2009, 17:28

Bonjour à tous, j'ai encore une question Smile

pour ce code-ci

Code:
#include <iostream.h>
class P
{
int * tab;
unsigned size;
public :
P ( unsigned nb )
{
if ( nb == 0 ) nb = 1;
int * tab = new int[nb];
size = nb;
for ( nb=0; nb<size; nb++ ) tab[nb]=0;
}
void putAt(unsigned i, int val) { tab[i]=val; }
int getAt(unsigned i) { return tab[i]; }
};
int main()
{
P test(10);
test.putAt(5,-9);
cout << test.getAt(5) << endl;
return 0;
}

Ca plante apparemment au test.putAt(5,-9), je comprend pas pourquoi ?

Encore merci pour l'aide Smile

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  nvs le Mer 07 Jan 2009, 17:31

Zahra a écrit:Bonjour à tous, j'ai encore une question Smile

pour ce code-ci

Code:
#include <iostream.h>
class P
{
int * tab;
unsigned size;
public :
P ( unsigned nb )
{
if ( nb == 0 ) nb = 1;
int * tab = new int[nb];
size = nb;
for ( nb=0; nb<size; nb++ ) tab[nb]=0;
}
void putAt(unsigned i, int val) { tab[i]=val; }
int getAt(unsigned i) { return tab[i]; }
};
int main()
{
P test(10);
test.putAt(5,-9);
cout << test.getAt(5) << endl;
return 0;
}

Ca plante apparemment au test.putAt(5,-9), je comprend pas pourquoi ?

Encore merci pour l'aide Smile
où l'attribut tab de l'objet test est-il initialisé ?






_________________

nvs

Nombre de messages : 5238
Age : 43
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Anthoblack le Mer 07 Jan 2009, 17:32

Parce qu'on redéfinit tab dans le constructeur ?

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Mer 07 Jan 2009, 17:34

ah oui, j'ai compris, il aurait fallu avoir dans le constructeur
tab = new int[nb]
au lieu de
int * tab = new int[nb];
c'est ca?


Dernière édition par Zahra le Mer 07 Jan 2009, 17:34, édité 1 fois

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  DeS le Mer 07 Jan 2009, 17:34

Anthoblack a écrit:Parce qu'on redéfinit tab dans le constructeur ?
oui car le tab du constructeur n'est pas l'attribut de P mais une variable du constructeur.

DeS

Nombre de messages : 324
Age : 27
Prénom : Denis
Statut : etd 2eme gestion
Localisation : Rebecq(village paumé où brouttent les vaches)
Date d'inscription : 15/10/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  nvs le Mer 07 Jan 2009, 17:53

DeS a écrit:
Anthoblack a écrit:Parce qu'on redéfinit tab dans le constructeur ?
oui car le tab du constructeur n'est pas l'attribut de P mais une variable du constructeur.
variable locale qui meurt à la fin de l'exécution du constructeur et qui masque l'attribut qui lui n'est pas initialisé Sad














_________________

nvs

Nombre de messages : 5238
Age : 43
Prénom : Nicolas
Statut : prof
Localisation : bxl
Date d'inscription : 24/11/2005

http://nvansteenkiste.googlepages.com

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Anthoblack le Jeu 08 Jan 2009, 11:09

Bonne merde à tous...

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Zahra le Jeu 08 Jan 2009, 11:40

Anthoblack a écrit:Bonne merde à tous...

à toi aussi Smile

Zahra

Nombre de messages : 250
Age : 29
Prénom : Zahra
Statut : Etudiante 2e Gestion
Localisation : Wauthier-Braine
Date d'inscription : 18/05/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  DeS le Jeu 08 Jan 2009, 16:19

...bonne merde pour l'interro pratique aussi Smile

DeS

Nombre de messages : 324
Age : 27
Prénom : Denis
Statut : etd 2eme gestion
Localisation : Rebecq(village paumé où brouttent les vaches)
Date d'inscription : 15/10/2007

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Anthoblack le Jeu 08 Jan 2009, 17:10

DeS a écrit:...bonne merde pour l'interro pratique aussi Smile
A vous aussi Smile

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [C++] interro théorique 2eG

Message  Contenu sponsorisé Aujourd'hui à 21:06


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum