Passage des propriétés dans l'héritage
Bonjour à tous,
pour vous expliquer mon problème :
Voici une classe mère dont j'ai définis un super constructeur ci dessous :
Code:
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
|
Scheme::Scheme(int size, double debut, double fin, double Delta_X, double temps, double bc1, double bc2, double U)
{
numberP = size;
DeltaX = Delta_X;
time = temps;
BC1 = bc1;
BC2 = bc2;
u = U;
std::vector <double> x(size);
std::vector <double> fn(size);
std::vector <double> fan(size);
std::vector <double> fnplusone(size);
x[0] = debut;
x[size - 1] = fin;
Delta_T = Delta_X*0.93;
A = Delta_T / Delta_X;
for (i = 1; i < size - 1; i++)
{
x[i] = x[0] + (i*Delta_X);
}
double t;
} |
Ce super constructeur me sert à initialiser toutes mes variables.
J'ai une classe "fille" heritant de cette classe mère, et je souhaite réutiliser les variables définies ci dessus dans des méthodes de cette classe "fille".
Classe fille :
Code:
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
std::vector <double> MethodsNum::UpwindScheme(double scheme)
{
Calculateur C;
for (i = 0; i < numberP - 1; i++)
{
x[i] = x[0] + (i*DeltaX);
}
if (scheme == 1)
{
for (t = 0; t <= time; t += Delta_T)
{
if (t == 0)
{
for (i = 0; i<numberP; i++)
{
fn[i] = 0.5*(C.sign(x[i]) + 1);
}
}
//Boundary condition
fn[0] = BC1;
fn[numberP - 1] = BC2;
fnplusone[0] = fn[0];
fnplusone[numberP - 1] = fn[numberP - 1];
for (i = 1; i < numberP - 1; i++)
{
fnplusone[i] = (-u*(Delta_T / DeltaX)*(fn[i] - fn[i - 1])) + fn[i];
}
for (i = 1; i < numberP; i++)
{
fn[i] = fnplusone[i];
}
}
return fnplusone;
}
else if (scheme == 2)
{
for (t = 0; t <= time; t += Delta_T)
{
if (t == 0)
{
for (i = 0; i<numberP; i++)
{
fn[i] = 0.5*(C.sign(x[i]) + 1);
}
}
//Boundary condition
fn[0] = BC1;
fn[numberP - 1] = BC2;
fnplusone[0] = fn[0];
fnplusone[numberP - 1] = fn[numberP - 1];
for (i = 1; i < numberP - 1; i++)
{
fnplusone[i] = (((1 / (1 + u*A))*fn[i])) + (1 / (1+(DeltaX / (u*Delta_T)))*fnplusone[i - 1]);
}
for (i = 1; i < numberP; i++)
{
fn[i] = fnplusone[i];
}
}
return fnplusone;
}
} |
Cependant, les valeurs initialisées dans le super constructeur deviennent 0 quand j'instancie ma classe fille.
Est-il possible de garder ses valeurs en mémoire sans les passer en argument de ma méthode issue de la classe fille ?
Car si ce n'est pas possible, qu'elle est l'utilité de la classe mère ?
Merci d'avance,
cordialement