Je dis une première approche car, comme souvent en programmation, il existe plusieurs façons de faire la même chose.
Nous allons commencer par tout mettre dans un fichier main.cpp, et nous ferons le tri après.
1
2
3
|
#include <iostream>
#define SIZE_PVECTOR_TAB 50
|
Dans ce qui suis, nous allons écrire des expressions templates pour permettre de faire des calculs avec la structure PVector
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
struct PVector{
typedef double* Iterator;
typedef const double* ConstIterator;
Iterator begin(){return p_elements;}
Iterator end(){return p_elements + SIZE_PVECTOR_TAB;}
ConstIterator begin()const{return p_elements;}
ConstIterator end()const{return p_elements + SIZE_PVECTOR_TAB;}
void setValue(double val){
for(Iterator it = begin(); it != end(); ++it){
*it = val;
}
}
template<class T>
const PVector& operator = (T expr);
double p_elements[SIZE_PVECTOR_TAB];
};
template <class T>
const PVector& PVector::operator = (T expr){
for(Iterator i = begin(); i != end(); ++i, ++expr){
*i = *expr;
}
return *this;
}
|
Notez que l'opérateur = prend un type abstrait, que nous allons définir dans ce qui suit.
Nous allons d'abord définir les différents opérateurs dans un type énuméré :
1
2
3
4
5
6
7
8
9
10
|
enum Operators{
Add, Sub, Mult, Div, Plus, Minus, Const };
|
|