IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Debutant dans l'utilisation des classes en C++


Sujet :

C++

  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut Debutant dans l'utilisation des classes en C++
    Bonjour,

    Voila je suis debutant en c++ oriente programmation mathematique, et j'essaie d'en savoir un peu plus sur la definition des classes avant de commencer a coder.

    Dans un bouquin que je suis actuellement entrain de lire je tombe sur la definition de la calsse Diffusion process "ci-dessous", qui contient des declaration de membres et fonction membres que j'arrive a comprendre mais le debut de la definition de cette classe m'echappe totalement (partie en gras).

    D'autant plus que je n'arrive pas a trouver sur le net la signification du mot cle "~" avant DiffusionProcess. Pouvez-vous s'il vous plait m'eclairer sur cette premiere partie. Pouvez vous aussi s'il vous plait m'expliquer quel est l'interet d'introduire const = 0, apres avoir defini les deux membres drift et diffusion.

    Merci d'avance de l'aide apportee

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class DiffusionProcess
    {
    public:
    DiffusionProcess(double x0) : x0_(x0) {}
    virtual ∼DiffusionProcess() {}
    double x0() const { return x0_; }// returns the drift part of the equation, i.e. mu(t, x_t)
    virtual double drift(Time t, double x) const = 0;
    // returns the diffusion part of the equation, i.e. sigma(t,x_t)
    virtual double diffusion(Time t, double x) const = 0;
    // returns the expectation of the process after a time interval
    // returns E(x_{t_0 + delta t} | x_{t_0} = x_0) since it is Markov.
    // By default, it returns the Euler approximation defined by
    // x_0 + mu(t_0, x_0) delta t.
    virtual double expectation(Time t0, double x0, Time dt) const {
    return x0 + drift(t0, x0)*dt;
    }
    // returns the variance of the process after a time interval
    // returns Var(x_{t_0 + Delta t} | x_{t_0} = x_0).
    // By default, it returns the Euler approximation defined by
    // sigma(t_0, x_0)^2 \Delta t .
    virtual double variance(Time t0, double x0, Time dt) const {
    double sigma = diffusion(t0, x0);
    return sigma*sigma*dt;
    }
    private:
    double x0_;
    };

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    Par défaut
    • La première ligne en gras est le constructeur de la classe.
      Ce constructeur n'est pas seulement déclaré, il est défini inline directement dans la classe: On peut voir sa liste d'initialisation (seuls les constructeurs peuvent en avoir) et son corps (vide).
    • La seconde ligne est le destructeur de la classe: Vu qu'il est vide, sa présence sert juste à dire que la classe possède un destructeur virtuel.
    • La troisième ligne déclare et définit une fonction membre. Le const sert à indiquer que cette fonction membre ne modifie pas l'objet, et peut donc être appelée à partir d'un pointeur const sur l'objet.

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 13
    Points
    13
    Par défaut
    Merci Medinoc pour tes reponses claires, cela aide beaucoup.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Et pour le "=0" sur la troisième ligne, ça déclare une fonction virtuel pure,je te laisse chercher sur google je serais incapable de t'expliquer.

  5. #5
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Une petite remarque cependant:

    Vu que le destructeur est virtuel, il ne devrait pas être défini inline:

    En effet, les fonctions virtuelles sont tout à fait incompatibles avec les définitions inline, car:
    une définition inline (implicite ici) demande au compilateur de remplacer chaque appel à la fonction par son contenu
    une fonction virtuelle signale au compilateur (et à l'utilisateur) que la classe peut entrer dans une hiérarchie d'héritage, que le comportement est susceptible de changer selon le type réel utilisé à l'exécution et qu'il doit donc être décidé de manière dynamique sur base du type réel (cf polymorphisme).
    Citation Envoyé par anorexia Voir le message
    Et pour le "=0" sur la troisième ligne, ça déclare une fonction virtuel pure,je te laisse chercher sur google je serais incapable de t'expliquer.
    Sauf que la troisième fonction n'est ni virtuelle ni pure: il s'agit seulement de l'accesseur sur le membre x0_

    Cette fonction a en effet juste comme fonctionnalité de renvoyer une valeur cachée par l'implémentation

    (PS: si tu veux des explications sur les fonctions virtuelles pures, tu peux lire cette discussion )

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Arf je parlais de ça moi^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual double drift(Time t, double x) const = 0;
    .

    EDIT:En tout cas le lien est très intéressant j'ai toujours un peu de mal avec le polymorphisme^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2010, 22h40
  2. Utilisation des ".class" dans un projet Eclipse
    Par Lolitaaa dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 14/12/2009, 13h49
  3. [EAR] Utiliser des classes du module EJB dans le module Web
    Par H-bil dans le forum Java EE
    Réponses: 3
    Dernier message: 20/11/2009, 19h02
  4. utiliser des classes dans une classe
    Par dsant dans le forum C++
    Réponses: 4
    Dernier message: 10/03/2008, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo