Этот код большей частью знаком.
}//FIntegral
Этот код большей частью знаком. В отличие от класса HighOrderIntegral, здесь нет делегата, у функции EvaluateIntegral нет параметра функционального типа. Вместо этого тут же в классе определен защищенный виртуальный метод, задающий конкретную подынтегральную функцию. В качестве таковой выбрана самая простая функция, тождественно равная единице.
Для вычисления интеграла от реальной функции единственное, что теперь нужно сделать - это задать класс-потомок, переопределяющий виртуальный метод. Вот пример такого класса:
class FIntegralSon:FIntegral { protected override double sif(double x) { double a = 1.0; double b = 2.0; double c= 3.0; return (double)(a*x*x +b*x +c); } }//FIntegralSon
Принципиально задача решена. Осталось только написать фрагмент кода, запускающий вычисления. Он оформлен в виде следующей процедуры:
public void TestPolymorphIntegral() { FIntegral integral1 = new FIntegral(); FIntegralSon integral2 = new FIntegralSon(); double res1 = integral1.EvaluateIntegral(2.0,3.0,0.1e-5); double res2 = integral2.EvaluateIntegral(2.0,3.0,0.1e-5); Console.WriteLine("Father = {0}, Son = {1}", res1,res2); }//PolymorphIntegral
Взгляните на результаты вычислений.

Рис. 20.4. Вычисление интеграла, использующее полиморфизм
on_load_lecture()




« |
1
|
2
|
3
|
4
|
5
|
вопросы | »
учебники
|
для печати и PDA



Курсы | Учебные программы | Учебники | Новости | Форум | Помощь Телефон: +7 (495) 253-9312, 253-9313, факс: +7 (495) 253-9310, email: info@intuit.ru © 2003-2007, INTUIT.ru::Интернет-Университет Информационных Технологий - дистанционное образование |