Créer un objet
Vocabulaire
Classe (Class) :
Une classe est une sorte de Moule d'objet. La classe décrit les attributs (propriétés) et les méthodes (fonctions, void).
Lorsque la classe est crée, on pourra, dans le programme, ajouter autant d'objets que l'on souhaite. Ils auront les propriétés et les comportements de la CLASS.
Le mot clé CLASS décrit la classe. Par convention, le premier caractère est en majuscule.
class Piece
{
}
Généralement pour chaque class on créé un fichier header (.h) et un fichier cpp (.cpp)
composantes public, private
Toutes les composantes d'une classe ne sont pas accessibles à tous (aux autres classes)... On parle de droit d'accès.
Une classe possède deux droits d'accès.
La zone public comporte des variables, fonctions accessibles à tous.
La zone private est inaccessible de l'extérieur de la class.
class Piece
{
public:
.....
private:
.....
}
Dans public et private on placera à présent, comme cela se fait habituellement les variables et les void.
Constructeur
Le constructeur est une méthode un peu particulière qui :
- a obligatoirement le même nom que la classe
- ne doit rien renvoyer. Elle apparaît sasn type et n'est pas précédée par le mot clé void.
class Piece
{
public:
Piece(); //voila le constructeur par defaut
.....
Le rôle du constructeur est d'initialiser les variables qui ne sont pas des objets.
Le constructeur par défaut n'a aucun paramètre. Il est néanmoins indispensable même s'il ne fait rien.
/* piece.cpp */
#include "piece.h"
Piece::Piece()
{
//on place ici les variables à initialiser ou pas
}
Si des paramètres sont nécessaires, on peut surcharger le constructeur par défaut avec d'autres qui portent le même nom mais sont associés à des paramètres.
...
Piece(int k, int o);//constructeur qui défini la forme de la pièce et son orientation
Piece(const piece &p);//le constructeur de la pièce
Destructeur
Le destructeur est une méthode appelée lorsque l'on supprime l'objet de la mémoire. Il permet de libérer la mémoire réservée pour l'objet.
Si aucune allocation dynamique n'est faite (utilisation d'un new) le destructeur est inutile.
dans le header
public:
~Piece();
....
dans le cpp
Piece::~Piece()
{
......
}
Exemple d'un tetris
Exemple repris de l'excellent site de tfeysal.
On se limitera à l'objet Piece qui correspond à la piece du tetris
Dans l'entete (piece.h)
/* piece.h */
#ifndef PIECE_H
#define PIECE_H
#include "shapes.h" //shape.h contient un tableau de constante qui décrit la forme de la pièce
enum { CYAN = 1, BLUE, ORANGE, YELLOW, GREEN, PURPLE, RED, GHOST }; // Les couleurs
/* Les coordonnées du point de pivot de la pièce */
const int PIVOT_X = 1;
const int PIVOT_Y = 2;
class Piece //le nom de la classe
{
private:
int kind; // Le type de la pièce
int orientation; // Son orientation (sa rotation courante)
int color; // Sa couleur
int posX; // Son ordonnée dans l'aire de jeu
int posY; // Son abscisse dans l'aire de jeu
public:
Piece(); //Voila le constructeur
Piece(int k, int o);//constructeur qui défini la forme de la pièce et son orientation
Piece(const Piece &p);//le constructeur de la pièce
void setKind(int k);//pour fixer le type de pièce
void setOrientation(int o);//définir l'orientation
int getKind();//rend la valeur du type de pièce
int getOrientation();//rend la valeur de l'orientation de la pièce
void setColor(int c); //couleur de pièce
int getColor();
void setPosX(int x); //position X de la pièce
int getPosX();
void setPosY(int y); //position Y
int getPosY();
};
Dans le code :
/* piece.cpp */
#include "piece.h"
Piece::Piece()
{
// Rien à faire
}
Piece::Piece(int k, int o)
{
kind = k;
orientation = o;
}
Piece::Piece(const Piece &p)
{
kind = p.kind;
orientation = p.orientation;
color = p.color;
posX = p.posX;
posY = p.posY;
}
void Piece::setKind(int k)
{
kind = k;
}
void Piece::setOrientation(int o)
{
orientation = o;
}
int Piece::getKind()
{
return kind;
}
int Piece::getOrientation()
{
return orientation;
}
void Piece::setColor(int c)
{
color = c;
}
int Piece::getColor()
{
return color;
}
void Piece::setPosX(int x)
{
posX = x;
}
int Piece::getPosX()
{
return posX;
}
void Piece::setPosY(int y)
{
posY = y;
}
int Piece::getPosY()
{
return posY;
}