utiliser des classes dans mon code [C++] - C++ - Programmation
Marsh Posté le 12-02-2014 à 14:53:55
Bonjour,
Les classe en C++ c'est un peut différent des langage style C# ou Java
Tu as forcement 2 fichier :
MaClass.h
MaClass.cpp
Dans ton ficher .h tu as toutes tes déclaration de méthode et de variable.
Ex :
Code :
|
Pour ton fichier .cpp tu as juste a include MaClass.h
Et a utiliser tes méthodes et propriété que tu as créer dans MaClass.h
Et si tu veux utiliser ta classe autre part dans ton code tu doit également faire ton #include "MaClass.h" et faire si besoin tes héritage ( si utilisation dans une autres classe, sachant qu'une classe en c++ ne possède pas ( je crois ) de multi héritage )
Sinon tu veux plus d'information un tuto C++ objet pour voir comment on l'utilise et ça te reviendra vite ( l'objet reste de l'objet )
Marsh Posté le 12-02-2014 à 15:34:25
oki merci pour ton aide
donc si j'ai bien compris dans .cpp je mets mon ancien programme
et dans Maclasse.h je peux mettre ttes mes fonctions que j'utilise dans mon code actuel ? genre la fonction "maxi" ou la partie du programme qui génère une loi normale ? --> (
do{
x=rand();
y=rand();
x=2*(x/RAND_MAX);
y=2*(y/RAND_MAX);
x=x-1;
y=y-1;
s=pow(x,2)+pow(y,2);
}while (s > 1);
z = x*sqrt((-2*log(s))/s);
)
donc j'aurai un fichier avec mes fonctions dans .h et un fichier avec le reste du code ou j'appelle mes fonctions dans .cpp c'est bien ca ?
sinon qu'est ce que je peux mettre d'autre dans .h pour "épurer" le code dans .cpp ? à part les fonctions ?
Marsh Posté le 12-02-2014 à 15:40:32
Re,
Tu as bien compris le principe.
Ensuite à toi de juger ce que tu trouve bon d'intégrer dans ta classe ( tu regroupe en général les méthodes et propriété dans une classe si elle ont des fonction utile pour ton objet ).
Exemple :
Si tu as une classe ARME
Tu lui mettra les propriété int dégat, int nbBalle, int porter.
Et les méthodes void Tirer, void recharger, void viser.
Ensuite les seuls chose qui peuvent apparaitre dans ton .h ce sont
Des priopriété ( tes valeur )
des méthodes ( tes fonction )
Un constructeur
Un destructeur.
Le reste c'est de l'optimisation que tu va faire avec des fonction propre à la programmation Objet ( héritage, méthode public, private, static ect.. )
Marsh Posté le 12-02-2014 à 15:53:24
quand tu dis rentrer des valeurs (propriétés) dans .h, ce sont donc des valeurs fixes ?
car dans mon programme tous les paramètres sont rentrés par l'utilisateur (et selon ce qu'il rentre il obtient un prix différent) donc il n'y a rien de fixe (aucune valeur initialisés)
Marsh Posté le 12-02-2014 à 16:28:48
Re,
Non pas forcement, quand je dit rentrer ça veut dire créer.
Ex :
Code :
|
Mais cela signifie que tu aura des méthodes qui te permettrons de demander a l'utilisateur de saisir des paramètres ( avec des cin ).
Si tu ne connais pas les attribut public, privé ( pour les class, méthodes et propriété ) je te conseille d'y jeter un coup d'oeil.
Car ce sont ces attributs qui te permettrons de rendre accessible tes class, méthodes et propriété dans d'autres fichiers de ton code.
Marsh Posté le 12-02-2014 à 17:45:54
j'ai lu quelques cours sur les classes et j'ai crée un fichier header.h ou je vais mettre des fonctions
en fait à aucun moment j'ai besoin de créer une "classe" dans ce que j'ai fait ??? -->
Code :
|
du coup je pige pas pk tu parlais de classe avec méthodes alors que là j'ai juste à mettre mes fonctions et ca marche pareil
c'est parce que mes fonctions sont public (j'ai pas besoin de restrictions) que du coup j'ai pas besoin de classe c'est ca ?
Marsh Posté le 12-02-2014 à 19:30:02
Re,
La c'est juste un header ou tu place une partie de ton code ( mais ce n'est asbolument pas de la POO avec la notion d'objet )
Si je reprend ton code en POO ça donne ça
Ton .h :
Code :
|
ton .cpp
Code :
|
Mais si tu n'as jamais fait de programmation orienté objet je ne te conseille pas de commencer par du C++, pour moi le langage avec lequel j'ai compris c'est le C#
En tout cas voilà à quoi ressemblerais ton code en POO
Marsh Posté le 12-02-2014 à 14:40:50
Bonjour
voilà j'ai commencé à coder ce programme qui "price" plusieurs types d'options (pour le moment seulement 2, je compte en rajouter plusieurs par la suite)
le programme marche bien (il me donne les bons prix)
en revanche j'aimerais le modifier légèrement pour qu'il fasse la meme chose mais en utilisant des classes
or ca fait longtemps que je n'ai pas codé en C++ et je ne me rappel plus trop comment les inclure
j'ai pensé à un truc dans le genre :
class EuropeanOption {
public :
int maturity;
double strike;
double rate;
double underlyingprice;
double volatility;
};
et ensuite utiliser un pointeur ??
voilà le programme :
_______________________________________
#include<iostream>
#include<cstdlib>
#include<math.h>
using namespace std;
double maxi(double a, double b){
return a>=b ? a : b;
}
int main (int argc, char * const argv[]){
srand((unsigned)time(0));
double T,K,S0,sigma,r;
double calleu,puteu;
double x,y,z,s;
double meanc=0,meanp=0;
double St[100000];
double payoff[100000];
int type=0;
int i;
cout << "quel type d'options voulez vous pricer ?" << endl;
cout << "1 : call/put européen" << endl;
cout << "2 : call/put digitale" << endl;
cin >> type;
if (type != 1 && type != 2){
cout << "merci d'entrer une des propositions et pas n'importe quoi !" << endl;
return 0;
}
cout << "entrez la valeur de T :" << endl;
cin >> T;
cout << "entrez la valeur de K :" << endl;
cin >> K;
cout << "entrez la valeur de S0 :" << endl;
cin >> S0;
cout << "entrez la valeur de sigma :" << endl;
cin >> sigma;
cout << "entrez la valeur de r :" << endl;
cin >> r;
if (type==1){
for ( i=0 ; i<100000 ; i++ ){
do{
x=rand();
y=rand();
x=2*(x/RAND_MAX);
y=2*(y/RAND_MAX);
x=x-1;
y=y-1;
s=pow(x,2)+pow(y,2);
}while (s > 1);
z = x*sqrt((-2*log(s))/s);
St[i] = S0*exp(((r-(sigma*sigma)/2))*T + sigma*sqrt(T)*z);
payoff[i]= maxi((St[i]-K),0);
meanc=meanc+payoff[i];
}
meanc=meanc/100000;
calleu = exp(-r*T);
calleu = calleu*meanc;
puteu=calleu + K*(exp(-r*T))-S0;
cout << "le call européen vaut :" << calleu << endl;
cout << "le put européen vaut :" << puteu << endl;
}
else if (type==2){
int nominal=0;
int PayoffCallDig=0;
int PayoffPutDig=0;
cout << "entrez la valeur du nominal de l'option digitale :" << endl;
cin >> nominal;
for ( i=0 ; i<100000 ; i++ ){
do{
x=rand();
y=rand();
x=2*(x/RAND_MAX);
y=2*(y/RAND_MAX);
x=x-1;
y=y-1;
s=pow(x,2)+pow(y,2);
}while (s > 1);
z = x*sqrt((-2*log(s))/s);
St[i] = S0*exp(((r-(sigma*sigma)/2))*T + sigma*sqrt(T)*z);
if ( St[i] - K >= 0 ) {
PayoffCallDig = nominal;
PayoffPutDig = 0;
}
else {
PayoffCallDig = 0 ;
PayoffPutDig = nominal;
}
meanc=meanc+PayoffCallDig;
meanp=meanp+PayoffPutDig;
}
meanc=meanc/100000;
meanp=meanp/100000;
meanc=meanc*exp(-r*T);
meanp=meanp*exp(-r*T);
cout << "le call digital vaut :" << meanc << endl;
cout << "le put digital vaut :" << meanp << endl;
}
return 0;
}
______________________________________
si quelqu'un peut me donner un coup de main, je lui en serai éternellement reconnaissant
thx
Message édité par HeisenberG75 le 12-02-2014 à 14:45:11