OVH Cloud OVH Cloud

Ultra débutant : Polymorphisme, With...

1 réponse
Avatar
Vaguener Frank
Bonjour, j'ai travaillé avec du Delphi pendant longtemps et je passe à la
portabilité d'une mini application (3000 lignes de code) au borland C++
builder

Voilà mon problème

1.: J'ai une procédure void OuvrirFichier(TOpenDialog *monOd) qui s'occupe
d'ouvrir des fichiers

Comment faire pour lui donner un Opendialog alors que j'ai un TObject comme
paramètre

(en delphi je faisais TOpendialog(Monobjet).Execute;

2.: Lorsqu'on utilise plusieurs composants d'une forme dans une procédure,
doit-on toujours réécrire

Form1->Monobjet
Form1->Monautre objet

ou existe t-il une fonction comme with en Delphi permettant de faire

with Form1 do
Begin
Monobjet->Execute();
MonAutreobjet->Hide();
end;

3.: Pourriez vous me dire quelles sont les instructions pour ouvrir un
fichier d'une structure particulière et la charger dans celle-ci

ex :

Struc Mastruc {
char[10] nom;
char[20] prenom;
}

Mastruc Mavariable;

J'ai vu qu'on déclarait un fichier par File Fichier;
ne peut-on/ne doit-on préciser que c'est un fichier de structure x ?


Bon ben je sais que ca doit être des questions idiotes, mais je suis perdu
en C++ et j'ai beau chercher sur le net, je trouve pas donc en recours, je
m'adresse ici...

Un grand merci à tous!

1 réponse

Avatar
Vianney Lançon
Le Sat, 6 Dec 2003 17:52:17 +0100, dans fr.comp.lang.c++,
Vaguener Frank a dit :
Bonjour, j'ai travaillé avec du Delphi pendant longtemps et je passe à la
portabilité d'une mini application (3000 lignes de code) au borland C++
builder

Voilà mon problème

1.: J'ai une procédure void OuvrirFichier(TOpenDialog *monOd) qui s'occupe
d'ouvrir des fichiers

Comment faire pour lui donner un Opendialog alors que j'ai un TObject comme
paramètre


TObject* object = new Opendialog(/*paramètres*/);
...
Opendialog * dialog = dynamic_cast<Opendialog*>(object);
assert(dialog);

OuvrirFichier(dialog);



(en delphi je faisais TOpendialog(Monobjet).Execute;

2.: Lorsqu'on utilise plusieurs composants d'une forme dans une procédure,
doit-on toujours réécrire

Form1->Monobjet
Form1->Monautre objet

ou existe t-il une fonction comme with en Delphi permettant de faire

with Form1 do
Begin
Monobjet->Execute();
MonAutreobjet->Hide();
end;


Il n'y a pas de with. Mais si tu veux éviter les noms a rallonge du
style form1->getWidget1()->getLabel1()->...->print("hello world")
tu peux toujours utiliser des pointeurs et/ou références.

Object* Monobject = From1->Monobjet;
Object* MoniAutreobject = From1->MonAutreobjet;
Monobjet->Execute();
MonAutreobjet->Hide();

De même si tu veux factoriser ton code.
with Form1 do
Begin
Monobjet->Execute();
MonAutreobjet->Hide();
end;

{
Form* current = Form1;
current->Monobjet->Exectute();
current->MonAutreObjet->Hide();
}

with Form2 do
Begin
Monobjet->Execute();
MonAutreobjet->Hide();
end;

{
Form* current = Form2;
current->Monobjet->Exectute();
current->MonAutreObjet->Hide();
}




3.: Pourriez vous me dire quelles sont les instructions pour ouvrir un
fichier d'une structure particulière et la charger dans celle-ci

ex :

Struc Mastruc {
char[10] nom;
char[20] prenom;
}

Mastruc Mavariable;


Tu es obligé de le faire à la main: en effet tu es responsable
de la manière dont tes données sont présenté dans les fichiers.

ostream & operator<<(ostream& os, const Mastruct& userInfo)
{
os.write(userInfo.nom, sizeof(userInfo.nom));
os.write(userInfo.prenom, sizeof(userInfo.prenom));
return os;
}
istream & operator>>(istream& is, Mastruct& userInfo)
{
is.read(userInfo.nom, sizeof(userInfo.nom));
is.read(userInfo.prenom, sizeof(userInfo.prenom));
return is;
}



Mastruc data;
//ecriture
{
ofstream fileToWrite("data.txt"):
fileToWrite << data;
}
//lecture
{
ifstream fileToRead("data.txt"):
fileToWrite >> data;
}

Renseignes toi sur l'utilisations de fstream pour le faire plus
rigoureusement.



J'ai vu qu'on déclarait un fichier par File Fichier;
ne peut-on/ne doit-on préciser que c'est un fichier de structure x ?
Non. Mais tu peux te faire une petite bibliothèque pour sérialiser, ou

désérialiser tes données.



Bon ben je sais que ca doit être des questions idiotes, mais je suis perdu
en C++ et j'ai beau chercher sur le net, je trouve pas donc en recours, je
m'adresse ici...



Les exemples que tu as données sont spécifique Borland. Hors ce groupe
ne traite que du c++ standard. Donc il faut mieux s'addreser aux
news-group dédié borland pour les question borland. Et se limité
au c++ universel ici sous-peine d'être HS.
Sinon l'investissement dans un bon bouquin te feras gagner beaucoups de
temps et d'effort.


Un grand merci à tous!
A bientôt

--
Vianney LANÇON
radix omnia malorum prematurae optimisatia est
-- Donald Knuth