---
# System prepended metadata

title: Cour 1 -- Language Orienté Objet avancé (C++)
tags: [M1 S1, cpp, cour]

---

# Cour 1 -- Language Orienté Objet avancé (C++)

###### tags `cour` `M1 S1` `cpp`
[Somaire](/V1WXmN9oTdauw8pTXPhqrQ)\
[~~Precedent~~]()
> [time= 14 sept 2020]

[TOC]

## C++ un C étendu?

### compilation
- gcc
#### convention de nomage
fichier sourche:
- .cpp
- .C
- .cxx
- .cc
- .cp
- .c++
fichier d'entête (headers)
- .tcc (template)
- .hpp
- .H
- .hxx
- .hh
- .h

faire un fichier objet:\
`g++ - c fichier.cpp` ->`fichier.o`\
édition de lien: \
`g++ -o fichierExecutable fichier1.o fichier2.o...`

standard : `-std=c++17`\
mode le plus strict pour le standard: `--pedandic`

## Les variables
- un **type** est un ensemble de valeurs et un ensemble d'++opérations associées++.
- un **objet** est un ++espace mémoire++ contenant une valeur d'un ++type donné++.
- une **valeur** est un ++mot binaire++ interprété dans un ++type donné++.
- une **variable** est un ++objet nommé++.
- une **déclaration** associe un ++nom à un objet++.
- une **définition** est une ++déclaration++ ++associant++ un ++espace mémoire à l'objet déclaré++.

La ++lecture++ une variable on produit une **r-value**\
L'++écriture++ se fait par une **l-value**

### constante
#### const_expr
est évalué a la compilation

##### type constant
**const *type*** interdit l'usage en tant que l-value.\
les opérateurs qui modifient la valeur de la varaiable du type considéré (ex: =, ++)

```=cpp
 
const double avogadro = 6.022E23; 
const double racineDeTrois = 1.732; 
avogadro = 34; // interdit

const double *pointeurSurConstante = &avogadro;
pointeurSurConstante = &racineDeTrois;
*pointeurSurConstante = 12; // interdit

double rapport = 24;
double longueur = 4.5; 
double *const pointeurRapport = &rapport; *pointeurRapport = 89;
pointeurRapport = &longueur; // interdit

const double * const pConstanteDAvogadro = &avogadro;
pConstanteDAvogadro = &racineDeTrois; // interdit 
*pConstanteDAvogadro = 28.9; // interdit 
```

++dans les prototypes:++
```=cpp
char *strcpy(char *dst, const char *src)
```
```cpp=
char *s = new char[100]; 
const char *t = “Bonjour“; 
strcpy(s,t);
strcpy(t,s); // interdit 
char *u = new char[100]; 
strcpy(u,s);
```
on ne peut pas modifié src

### new / delete
```cpp=
int *a = new int(12); 
delete a;

// array
int *tab_a = new int[10];
delete []tab_a;
```

### valeur par défaut
```c++
constexpr int RADIAN = 0;
constexpr int DEGRE = 1;
constexpr int GRADE = 2;
double sinus(double angle, 
             const int unite=RADIAN);
void foo(int a, int b, int c=1, int d=2, int e=3);

void main()
{
    f(10, 11, 13); // équiv f(10, 11, 13, 2, 3);
}
```

[Suivant](/fKuIq0FAQaCvXKklO6Xgew)