devstory

Classe et objet en C++

  1. Remarque pour Eclipse
  2. Créer un projet C++ sur Eclipse
  3. Exécuter des applications C++
  4. Expliquer la structure du programme C++
  5. Votre première classe
  6. Exemple de la classe dans C++ (2)
  7. Exemple de la classe dans C++ (3)

1. Remarque pour Eclipse

Si vous travaillez avec: Windows 64bit + Eclipse 64bit + Java64bit, vous devez ouvrir Eclipse avec l'autorisation de l'Administrator, il est difficile qu' Eclipse n'imprime pas des message sur l'écran de Console dans le cas d'exécution en mode normal.

2. Créer un projet C++ sur Eclipse

Dans Eclipse sélectionnez:
  • File/New/Other..
Votre projet a été créé.
Votre projet a été créé avec un fichier source cpp disponible, nous expliquerons la structure du fichier source plus tard.

3. Exécuter des applications C++

Dans le premier temps, vous devez compiler votre projet. Cliquez sur le projet et sélectionnez "Project/Build All".
Votre Eclipse peut inclure un projet, vous devez ajouter une nouvelle configuration pour exécuter le projet en cours.
Vous programmez, vous devez sélectionner le mode d'exécution, c'est DEBUG.

4. Expliquer la structure du programme C++

Au-dessus, vous avez exécuté un programme C++ simple, il affiche une chaîne sur l'écran. En C, pour imprimer une chaîne à l'aide de printf, mais avec C++, utilisez cout, bien sûr, toutes les fonctions C continuent d'être utilisées en C++.
Voyons comment utiliser cout:
// Cout command used to print a string to the screen:

cout << "One";


// Print a string "One " and next is string "Two ".

cout << "One "  << "Two ";


// Print a string "One " next string "Two " and next number 3.

cout << "One " << "Two "  <<  3 ;

// Print a string "One" and next is newline character.

cout << "One" << endl;
  • TODO

5. Votre première classe

C++ est destiné à la programmation orientée objet sur le langage de programmation C. Et la classe est une notion de C++. La classe est un modèle de plan (pour créer) des objets.

Pour être simple et facile à comprendre, j'utiliserai la classe pour modéliser un rectangle avec une longueur et une hauteur, et une fonction pour calculer la zone du rectangle.
Créer un fichier de ressources Rectangle.cpp:
Code:
Rectangle.cpp
#include <iostream>
using namespace std;

namespace mynamespace {

  class Rectangle {

      private:
          int width;
          int height;

      public:
          Rectangle();
          Rectangle(int, int);

      public:
          int getArea() {
              return  width * height ;
          }
          int getWidth() {
              return width;
          }
          int getHeight()  {
              return height;
          }
  };

  Rectangle::Rectangle() {
      width = 10;
      height = 5;
  }

  Rectangle::Rectangle(int a, int b) {
      width = a;
      height = b;
  }
}


// Declare use libraries located in the namespace 'mynamespace'.
// (Including Rectangle (Because it is in this namespace) ).
using namespace mynamespace;

int main() {

// Create a Rectangle 'rect1' from Constructor Rectangle(int, int).
// Value 5 is assigned to the width, the value 4 is assigned to the height.
Rectangle rect1(5, 4);

// Create a Rectangle 'rect2' from default Contructor Rectangle().
// width, height are assigned default values
Rectangle rect2;

cout << "rect1:" << endl;
// Call method to get with
cout << " width: " << rect1.getWidth() << endl;
// Call method to get heght
cout << " height: " << rect1.getHeight() << endl;

// Call the method to calculate the area.
cout << " area: " << rect1.getArea() << endl;

cout << "rect2:" << endl;
cout << " width: " << rect2.getWidth() << endl;
cout << " height: " << rect2.getHeight() << endl;
cout << " area: " << rect2.getArea() << endl;
return 0;
}
Remarque: Le programme C/C++ ne permet qu'une fonction main() dans l'ensemble du projet, vous devez donc renommer l'autre fonction main() en main_xxx() avant d'exécuter cet exemple.
L'exécution de l'exemple:
Remarque: Il existe des mots-clés comme private, protected, public peut être situé avant le champ (field), la méthode (method) ou un constructeur (constructor). Temporairement, nous ne parlons pas d'eux, c'est access modifier (le modificateur d'accès) qui sera abordé dans mon prochain tutoriel:
TODO: LINK?
Maintenant, vous devriez voir l'explication de la classe, c'est très important.

6. Exemple de la classe dans C++ (2)

Ensuite, nous voyons un exemple dans la classe C++, qui a déclaré que tout le constructeur (Constructor) et les méthodes (method) sont en classe.
Circle.cpp
#include <iostream>
#include <math.h>
using namespace std;


namespace mynamespace {

    class Circle {

        private:
            int radius;

        public:
            Circle() {
                radius = 100;
            }
            // Constructor with one parameter.
            // Assign value for radius field.
            Circle(int r) {
                radius = r;
            }

        public:
            float getArea() {
                // M_PI is a constant defined in <math.h>
                return  M_PI * radius* radius ;
            }
            // Method returns radius
            // (The content of this method is written in another place)
            int getRadius();

            // Method to assign a new value for the radius
            void setRadius(int r){
                radius = r;
            }
    };

    // Content of getRadius()
    int Circle::getRadius() {
         return radius;
    }
}

// Declare to use the namespace 'mynamespace'.
using namespace mynamespace;

int main() {

    // Create a Circle with radius = 5.
    Circle circle1(5);

    // Create a Circle with defalt radius (100).
    Circle circle2;

    cout << "Circle 1:" << endl;
    cout << " radius: " << circle1.getRadius()  << endl;
    cout << " area: " << circle1.getArea() << endl;

    cout << "Circle 2:" << endl;
    cout << " radius: " << circle2.getRadius() << endl;
    cout << " area: " << circle2.getArea() << endl;

    // Set new value for the radius.
    circle2.setRadius(200);

    cout << "Circle 2 (After set new Radius):" << endl;
    cout << " radius: " << circle2.getRadius() << endl;
    cout << " area: " << circle2.getArea() << endl;

    return 0;

}
L'exécution de l'exemple:

7. Exemple de la classe dans C++ (3)

Lorsque vous créez une classe avec Wizard d'Eclipse elle va créer 2 fichiers ClassName.h et ClassName.cpp. Dedans ClassName.h déclare que votre classe comprend des champs (field), des méthodes (method) et les constructeur (constructor). Et leurs contenus seront écrits dans ClassName.cpp.
Regardons un exemple, vous avez créé une classe Person sur Eclipse avec l'aide de Wizard.
Créez une classe nommée Person et se trouve dans namespace (l'espace de nom): mynamespace.
La classe Person a été créé, elle comprend 2 fichiers Person.cpp & Person.h
Maintenant, vous devez éditer le code de Person.h & Person.cpp:
Person.h
#ifndef PERSON_H_
#define PERSON_H_

// Using string
#include <string>

// Using namespace std (to use string, cout,..)
using namespace std;

namespace mynamespace {

  
    class Person {

        private:
            // A field
            string name;

        public:
            // Default constructor
            Person();
            // Constructor with one parameter.
            Person(string);

            // Destructor.
            virtual ~Person();



        public:
            // Method return name of person.
            string getName();
            // Set new name for person.
            void setName(string);

    };

}

#endif
Person.cpp
// Inclure Person.h
#include "Person.h"
#include <iostream>
#include <string>

using namespace std;

namespace mynamespace {

    Person::Person() {
        // Default name.
        name = "Anonymous";
    }

    Person::Person(string name) {
        // Assign value to field of Person.
        // Using this -> name to refers to name field of Person.
        // (To avoid confusion with the parameter 'name').
        this-> name = name;
    }

    // Destructor, same name with name of class and has no parameters.
    Person::~Person() {
        cout<< "Destructor called" <<endl ;
    }


    // Content of method getName().
    string Person::getName()  {
        return this-> name;
    }

    // Set new name for person.
    void Person::setName(string newName)  {
        // Assign new name.
        name = newName;
    }

}
Destructor (La méthode de déstructeur de l'objet):
L'objet a été créé, et n'est plus utilisé, il serait supprimé dans la mémoire de l'ordinateur, juste avant qu'il ne soit enlevé, le Destructeur (Destructor)sera appelé. Normalement, lorsque vous créez un objet et utilisez d'autres ressources dans le système, comme l'ouverture du fichier à lire, vous pouvez libérer le fichier dans le destructeur de l'objet.
Vous pouvez utiliser la classe Person sur un autre fichier source.
PersonTest.cpp
#include "Person.h"
#include <iostream>
#include <string>

using namespace std;

 
using namespace mynamespace ;

int main() {

    // Create a Person object.
    Person billGate("Bill Gate");

    cout << "billGate.getName(): " << billGate.getName() << endl;

    // Create a Person from default contructor.

    Person aPerson ;

    cout << "aPerson.getName(): "<< aPerson.getName() << endl;

    cout << "aPerson set new name" << endl;

    // Set new name for aPerson.
    aPerson.setName("Markus Hess");

    cout << "aPerson.getName(): " << aPerson.getName() << endl;

    return 0;


}
L'exécution de l'exemple: