# 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)