Master Class

Visual C++

 Un programme

 

- instructions

 

 

 

 

- données

 Un programme

 

- fichier binaire

 

- lié à un système d'exploitation

Langage de programmation

 

- pour créer un programme!

- fichier texte lisible

- possède un vocabulaire et une grammaire spécifique

- compilé/interprété

- autorise/force différents concepts de programmation : object-oriented, constraint programming, functional programming, ...

Langage de programmation

 

Assembleur

org 100h
mov dx,msg
mov ah,9
int 21h
mov ah,4Ch
int 21h
msg db 'Hello World!$'

Basic

10 PRINT "Hello World!"
20 END

Pascal

PROGRAM Bonjour;
BEGIN
   WriteLn('Hello World!')
END.

Langage de programmation

 

C++

#include <iostream>
int main() {
    std::cout << "Hello World!" << endl;
    return 0;
}

Java

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

Python

print('Hello World!')

C++

- Langage de programmation compilé

- se base sur le langage C

- permet accès bas niveau mais autorise des concepts de programmation haut niveau

- beaucoup utilisé dans le jeu vidéo car permet d'optimiser la vitesse et la gestion des ressources

 

Présentation C++

Cours C++ Wikibooks

Cours C++ OpenClassrooms

 

Créer un exécutable

compilation

link

C++

Librairies

compilation

link

Créer une entité

.cpp

link

.h

déclaration

définition

.cpp

.obj

.obj

compilation

compilation

Visual Studio

  • IDE
  • Editeur de texte + assistant programmation
    • coloration syntaxique
    • dictionnaire des fonctions
    • outils d'optimisation
    • ...
  • Compilateur, linker
  • Debugger
  • Editeur C++ officiel pour Unreal Engine

Visual Studio

  • Fichier -> Nouveau -> Projet
  • Visual C++
    • Application console Windows
    • nom, emplacement
  • Générer -> Générer la solution
  • ouvrir une Invite de commandes (touche Win, 'cmd', Entrée)
  • aller dans le répertoire de la solution \Debug
  • lancer l'exécutable

C++

  • variables, type de données
  • instructions
    • opérations mathématiques
    • bouger des valeurs
    • conditions
    • boucles
  • fonctions
  • classes
  • templates
  • pointeurs

Variables

 

 

char lettre = 'e';

 

int nombre = 12;

 

 

 

float nombreVirgule = 14.56;

e

Mémoire

CPU

FPU

Instructions

  • opérations mathématiques
  • bouger des valeurs
  • conditions
  • boucles

Fonctions

Une boite qui peut prendre des valeurs en entrée et qui peut renvoyer une valeur

Classes

Un objet qui contient des variables et des fonctions

Classes

Templates

TArray<int> listeEntiers;

TArray<float> listeReels;

TArray<Crepe> crepes;

Objets pouvant être utilisé avec différents types de données

Pointeurs

 

 

char lettre = 'e';

 

 

 

char *p = &lettre;

 

e

Mémoire

4203

4202

4204

4205

4206

4203

Cheat sheet 1

   - programme exemple
// mon premier programme
#include <iostream>
int main()
{
    std::cout << “Ia ora na fenua !”;
    return 0;
}

 

   - commentaires
// commentaire : le reste de cette ligne est ignore
/* un commentaire qui
  s’etale sur plusieurs
  lignes
*/

 

   - inclure des librairies
#include <librairie_standard>     // iostream, string, math, ...

#include "fichier.h"

donne acces a toutes les fonctions disponibles dans ces librairies

 

 

   - types de donnees

bool, char, int, float, double, void, ...

int8_t, uint8_t, uint64_t, ...

string, ...

auto x = var1;    // defini une variable x dont le type est le meme que celui de la variable var1

 

   - fonction

/* pour definir une fonction qui s'appelle maFunction et qui prend un premier parametre de type char et un deuxieme parametre de type float en entree */

int maFunction( char parametre1, float parametre2 ) {

    int monInt = 14;

    return monInt;    // Quand elle a fini, la fonction renvoie un int

}

int main(){

    int x = maFunction( 'C', 10.45 );

}

 

 

Cheat sheet 2

   - operations arithmetiques

+, -, * (multiplication), / (division), % (modulo = reste de la division)

var1 = 23 % 7;    // = 2

+=, -=, *=, /=, %=

var1 += var2;   // equivalent a : var1 = var1 + var2;

var1++;             // equivalent a : var1 = var1 + 1;

var1--;               // equivalent a : var1 = var1 - 1;

var2 = ++var1 + 2;   // equivalent a var1 = var1 + 1; var2 = var1 + 2;

var2 = var1++ + 2;   // equivalent a var2 = var1 + 2; var1 = var1 + 1;

  
   - tests de relations

 == egal

 != different

 >  superieur

 >= superieur ou egal

 <  inferieur

 <= inferieur ou egal

 

   - operateurs logiques

 &&  et

 ||   ou

  !     non

 

   - si <condition> alors

if( booleen_vrai ) {

        // les instructions a faire si la condition est vraie

}

 

if( var1 == var2 ){

       // si var1 est egale a var2, on fait ces instructions ici

       // ...

} else if( var1 == var3 ){

       // sinon, et si var1 = var3, on fait ces instructions ici

} else {

       // sinon, on fait ces instructions

}

 

switch( var1 ){      // test la valeur de var1

    case "OK":        // si var1 est egal a "OK", on fait les instructions

                              // jusqu'au break;

            break;

    case "PAS BON":    // si var1 == "PAS BON" alors ...

            break;

    case "CORRECT":    // si var1 == "CORRECT" alors ...

            break;

    default:              // si var1 est egal a autre chose alors ...

}

 

Cheat sheet 3

   - boucles

/* Au debut, on cree une variable i qui prend la valeur 0.

Ensuite, si la condition i<var1 est vraie, on effectue le contenu de la boucle.

A la fin de la boucle, on fait i++ et on recommence le test ...*/

for( int i=0; i<var1; i++ ){    

        // ...

}

 

int tab1[6];

for( auto& tt : tab1 ) tt = 0;    

modifie toutes les valeurs du tableau tab1. Si on n'a pas besoin de modifier les valeurs du tableau, on utilise "auto tt"

 

while( var1 != var2 ){       // tant que la condition est vraie,

                                           // on effectue le contenu de la boucle

}

 

do{          // effectue le contenu de la boucle puis teste si la

                // condition est vraie. Si oui, on passe dans la boucle

    // ...

} while( var1 > var2 );

 

   - utiliser le namespace std

using namespace std;    // evite d’ecrire std::cout, std::string, ...

Certaines fonctions ou elements sont inclus dans un namespace, pour les utiliser, il faut alors les appeler ainsi: nom_du_namespace::nom_fonction( … )

using permet d’ignorer l’appel au nom du namespace

Ex:

#include <iostream>

// …

std::cout << “message”;

  -------------------------

#include <iostream>

using namespace std;

// …

cout << “message”;

 

   - afficher et recuperer des valeurs sur la console

cin >> var1;       /* lit ce que l'utilisateur a rentre dans la console et le range dans la variable var1. L'utilisateur doit avoir tape la touche entree pour que cin s'execute */

cout << "mon message!";    // affiche un message sur la console

cout << "variable1 : "<< var1 << ", variable2 : "<< var2 << endl;  

/* affiche un message et le contenu des variables puis effectue un retour a la ligne (...grace a endl) dans la console */

Cheat sheet 4

   - pointeurs

int *ptr;        // defini un pointeur vers un int. ptr contiendra l'adresse d'une variable de type entier

ptr = &var1;    // ptr est initialise avec l'adresse de var1

int var2 = *ptr;    // var2 est initialise avec la valeur int qui se

                              // trouve a l'adresse contenue dans ptr

ptr = &var2;    // maintenant ptr pointe vers la valeur de var2

var2 = 12;

int var3 = *ptr;  // var3 = 12

cout << ptr;       // affiche l’adresse de var2    

cout << *ptr;     // affiche 12

 

   - modification du type

const int var = 12;  // variable dont la valeur n’est plus modifiable

const int * var1 = &var;    // var1 est un pointeur vers un int

                                             // non modifiable (var)    

int const * var1 = &var;    // var1 est un pointeur vers un int

                                             // non modifiable (var)

int * const var1 = &var2;    // var1 est un pointeur non modifiable

                                               // vers un int modifiable (var2)

 

float& vf2 = vf1;    // & indique une reference : vf2 correspond a

                                // la meme valeur que vf1

Attention: & devant le nom d’une variable deja initialisee indique son adresse

   - tableaux

int tab0[15];    // cree un tableau contenant 15 int.

                          // Les valeurs ne sont pas encore initialisees

float tab1[] = {4.2, 5, 9.78};   // tableau contenant 3 float, initialise

                                                  // avec les valeurs donnees

tab1[0] = 1.1;  // met la valeur 1.1 dans la premiere case de tab1

float x = tab1[2];    // x est initialisee avec la valeur de la

                                 // troisieme case de tab1

 

char *tab3 = new char[nombreVariable]; /* tableau dont la taille (nombreVariable) n'est connue qu'a l'execution du programme*/

    // ...

delete [] tab3;    /* tableau initialise avec new doit etre detruit avec delete [ ] lorsqu'on a fini avec */


   - exception

try{

        /* bloc de code qui va peut etre lancer une exception en cas de probleme */

} catch( int monInt ) {

 // une exception de type int a ete lancee! traite le probleme ici

} catch( … ){

 // recupere toutes les autres exceptions

}


throw 20;    // lance une exception de type int, egal a 20

Cheat sheet 5

   - classe et structure

class maClasse {    // defini une classe appelee maClasse

public:

  maClasse();    // constructeur : appelee a l’initialisation

  ~maClasse(){ delete [] c; };  // destructeur : appele a la destruction

  char* uneFonction( float a );

  float b;

 

private:

   char uneAutreFonction(){ if( b > 0 ) return 'N'; return 'O'; };

   int var1;

 

protected:

   char *c;

};

 

maClasse::maClasse()

{

    var1 = 45;

    c = new char[10];

    c = "rien";

}

char* uneFonction( float a )

{

    b = a;

    return c;

}

 

int main()

{

    maClasse mac;

    cout << mac.uneFonction( 12 ) <<” - ”<< mac.b;

}

 

Une Structure est equivalente a une classe mais elle se definie comme suit:

    struct maStructure { … };

La principale difference est que les elements d’une structure sont public par defaut alors que les elements d’une classe sont private

 

Cheat sheet 6

   - template

template<class T>
T Add(T n1, T n2)
{
        T result;
        result = n1 + n2;
        return result;
}

 

 // …

 

int a = Add( 5, 12 );

double a = Add( 5.4, 12.8 );


Les templates permettent de definir des fonctions ou classes qui manipulent differents types de parametres. Le compilateur generera des fonctions ou classes differentes a chaque fois qu’elles sont appelees avec des types de donnees differents

template<class T>
class Item {
    T Data;
public:
    Item() : Data( T() )    {}
    void SetData(T nValue)    {        Data = nValue;    }
    T GetData() const    {        return Data;    }
    void PrintData()    {        cout << Data;    }
};

    // …

 

Item<int> entite;

entite.setData( 23 );

entite.PrintData();

Cheat sheet 7

   - vector/iterator

#include <vector>

#include <iostream>

//...

std::vector<char> array;    // tableau de char, de taille variable

char c = 0;

while( c != 'x' ){

    std::cin>>c;

    array.push_back( c );    // cree une nouvelle case contenant c a

                                            // la fin du tableau array

}

char deuxiemeElement = array[ 1 ];

char quatriemeElement = array.at( 3 );


vector permet de creer des tableaux dont la taille peut varier automatiquement quand on rajoute ou retire des elements

std::vector<double> a;

a.push_back(1);

a.push_back(2);

a.push_back(3);

a.push_back(4);

a.push_back(5);

std::vector<double>::const_iterator i;

// parcourt tous les elements du tableau a :

for( i = a.begin(); i != a.end(); ++i ){    

    std::cout<<(*i)<<std::endl;    // *i est un element du tableau a

}


Voir aussi list et deque

MC Visual C++

By tetorea

MC Visual C++

  • 509