Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Помогите с виртуальной функцией


Автор: Towards 16.12.2007, 21:15
Помогите разобратся - программа не хочет выводить результат:
Код

#include <iostream.h>
#include <math.h>
using std::cout;
class progression {
    
public:
    double a, d, S;
    void set_par (double first_el, double q_d) {
        a = first_el;
        d = q_d;
    }
    virtual void show_cymma_p(int n){};
};
class arif_p : public progression {
public:
    void show_symma_p(int n)
    {
        S=((2*a + d*(n-1))*n)/2;
        cout << "a="<< a<<"\n";
        cout <<"d="<< d<< "\n";
        cout <<"n="<< n<< "\n";
        cout << "S(arif):"<< S << "\n";
        
    }
};
class geom_p : public progression {
public:
    void show_summa_p (int n)
    {
    cout<<"n="<<n<<"\n";
    cout<<"a="<<a<<"\n";
    cout<<"d="<<d<<"\n";
    if(d>1)
        {
        S=(a*(exp(n*log(d))-1))/(d-1);
        cout<<"S(geom)="<<S;
        }
    else 
        cout<<"d<1!!!";
    }
};
    int main ()
    {
        progression *p;
        arif_p a;
        geom_p b;

        p = &a;
        p->set_par(1, 1);
        p->show_cymma_p(5);

        p= &b;
        p->set_par (1, 2);
        p->show_cymma_p (5);

        return 0;
    }

Заранее спасибо!

Автор: MAKCim 16.12.2007, 21:18
Towards, 
а что не работает?
вроде с виду все нормально

Автор: Fin 16.12.2007, 21:40
Посмотри внимательно, как ты написал show_cymma_p во всех трех классах. void show_summa_p и show_cymma_p я думаю, что разные веши.

Автор: crazy_hand 16.12.2007, 21:41
ты в производных классах другие имена функциям даешь. В базовом классе у тебя это функция show_cymma_p. В след. классе это show_symma_p , и в последнем - show_summa_p. Сделай везде одинаковые имена, тогда все работать будет.

Автор: Towards 16.12.2007, 22:05
Блин, как сразу не заметил))
Спасибо всем!

Автор: crazy_hand 16.12.2007, 22:14
Towards
юзай отладчик - всегда сможешь узнать причину своей ошибки.

Автор: Towards 16.12.2007, 22:21
Crazy_hand
спасибо за совет.

Автор: JackYF 16.12.2007, 22:35
Towards, помечай тему решённой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)