Bonsoir,
J'ai pas mal de difficultés à comprendre les pointeurs... et en plus, lorsqu'ils sont utilisés dans les classes. J'ai un exercice où je dois créer une classe mère "Simple" et sa fille "Simple_F" comme ceci:
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 class Simple { //classe pour définir une fonction de base public: Simple(){}; //constructeur par défaut virtual double f(double x)=0; //cette méthode est fournie et doit rester inchangée }; class Simple_F : public Simple { private: double a, b, c, d; public: Simple_F(double A, double B, double C, double D) //constructeur { a = A; b = B; c = C; d = D; } virtual double f(double x) { double f = a*(x*x*x) + b*(x*x) + c*x + d; //méthode pour définir la fonction qui nous intéresse dans un premier temps } };
J'ai deux autres classes, une mère "RF", et sa fille "RF_b" ci-dessous (je dois écrire "RF_b", et ma question est en commentaire dans le code ci-dessous):
Ici j'aimerais initialiser la variable "fA" en faisant appel à la méthode "f" de la classe "Simple_F", et en remplaçant le paramètre x (argument de la fonction f) par la valeur de y et je ne suis pas certain de savoir comment faire avec le pointeur "Simple* F"
}Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 class RF { virtual double findRoot(Simple* F, double y) = 0; //cette méthode est fournie et doit rester inchangée }; class RF_B { private: double fA, fB, xp; //on définit quelques variables qui seront utilisées double fxp=100000000; public: virtual double findRoot(Simple* F, double y) //c'est là que j'ai un peu de mal, on pointe sur F, qui, d'après le main, fait référence à un objet de type "Simple_F" { while (fxp > 1e-10) //je commence mon algorithme { //avant même d'aller plus loin et d'écrire l'algorithme, //ici j'aimerais initialiser la variable "fA" en faisant appel à la méthode "f" de la classe "Simple_F", et en remplaçant le paramètre x (argument de la fonction f) par la valeur de y //je ne suis pas certain de savoir comment faire avec le pointeur "Simple* F" }
Le main est fourni et est comme ceci:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 int main() { { double A = 1; double B = -6; double C = 11; double D = -6; Simple_F f(A, B, C, D); //Ici on créé un objet Simple_F appelé "f", les paramètres a b c d sont initialisés à A B C D via le constructeur de Simple_F RF_B bisec; // créer un objet RF_B appelé bisec ofstream myfile; myfile.open("Simple_FRoots.csv"); myfile << "x,bisection,secant,f(bisection),f(secant)" << endl; for (double x = -1.0; x <= 6.0; x += 0.01) { //appel de la méthode findroot de l'objet bisec, argument 1 = adresse de f (objet de type Simple_F), argument 2 = x (qui vaut -1 d'abord) double r_bisec = bisec.findRoot(&f, x); } myfile.close(); } }
Merci à tous