Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2014, 15:54   #1
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию Определить виртуальную функцию вычисления частного от деления этих чисел

Меня в основном интересует main,правильно ли там я все сделала в соответствии с заданием относительно указателей,присвоений адресов производных объектов базовому.Задание:
Создать класс ПАРА ЧИСЕЛ. Определить виртуальную функцию вычисления частного от деления этих чисел. Создать производные классы ЭЛИПС (с полями-радиусами, считать, что центр эллипса совпадает с началом координат), ПРЯМАЯ (с полями-коэффициентами уравнения прямой) и своими функциями вычисления координаты y для заданного x. Для проверки использовать массив указателей на объекты базового класса, которым присвоить адреса объектов производных классов.
Код:
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
 
class para_chysel
{
protected:
    int a;
    int b;
public:
    void show()
    {
        cout<<"a= "<<a<<"\nb= "<<b<<endl;
 
    }
    virtual void virt_func() const
    {
        cout<<"a%b="<<a%b;
        
    }
    para_chysel():a(0),b(0){}
    int GetA(){return a;}
    int GetB(){return b;}
    para_chysel(int u,int v):a(u),b(v){}
 
 
    ~para_chysel();
};
 
para_chysel::~para_chysel()
{}
 
 
class pryama: public para_chysel
{
private:
    int c1;
    int x1;
public:
    pryama():para_chysel()
    {}
    pryama(int a, int b, int m1,int m2):para_chysel(a,b),c1(m1),x1(m2){}
    int GetC1() {return c1;}
    int GetB1(){return x1;}
 
 
    double result()
    {
        return (-((a*x1+c1)/b));
    
    }
    void show1()
    {
        cout<<"\nResult "<<result();
    }
 
    void virt_func()
    {
        para_chysel::virt_func();
        result();
    }
 
//  ~pryama();
};
 
class elips: public para_chysel
{
private:
    int x;
    int y;
 
public:
    elips() : para_chysel() 
    {}
    elips(int a, int b, int m1):para_chysel(a,b),x(m1),y(0){}
    ~elips();
    int GetX1(){return x;}
    double getArea();
    double getYY(){return y;}
    double getY();
    void virt_func();
    void print();
};
 
double elips::getY()
{
    //double y,r=0;
    y=((a*a-x*x)/(a*a))*(b*b);
    
    y=fabs((double)y);
    y=sqrt((double)y);
 
    cout<<"y = "<<y<<endl;
    return y;
}
double elips::getArea()
{
    return a*b*3.1415;
}
void elips::print()
{
    cout<<"Radius = "<<a<<" "<<b<<" S= "<<getArea()<< endl;
}
 
void elips::virt_func()
{
    para_chysel::virt_func();
    elips::print();
}
elips::~elips()
{}
 
int main()
{
    int u,v;
    cout<<"Enter a\n";
    cin>>u;
    cout<<"Enter b\n";
    cin>>v;
    para_chysel A(u,v);
    
 
    //A.show();
 
 
    
    double s,x;
    
 
    cout<<"Enter x\n";
    a:cin>>x;
    if(x>u||x<-(u))
    {
        cout<<"Enter one mote time\n";
        goto a;
    }
    
    para_chysel *nums[2];
 
    nums[0]= new elips(u,v,x);
//  nums[0]->virt_func(); 
 
    int c1,x1;
    cout<<"\nEnter koefficient C and x for: Ax+By+C=0\n";
    cin>>c1>>x1;
 
    nums[1]=new pryama(u,v,c1,x1);
//  nums[1]->virt_func();
 
    for(int j=0; j<2; j++)
        nums[j]->virt_func();
    
    for(int j=0; j<2; j++) 
        delete nums[j];
 
    elips B(u,v,x);
 
 
    B.getY();
    
    pryama C(u,v,c1,x1);
    
    C.show1();
    
}
Вероника99 вне форума Ответить с цитированием
Старый 21.04.2014, 16:16   #2
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Как понял задание, сделали не совсем правильно. Переменные a и b из para_chysel должны быть использованы как в elips, так и в pryama. Без объявления в производных классах дополнительных переменных. Иначе смысл наличия базового класса?

Ps: эллипс - через две ле)
Smogg вне форума Ответить с цитированием
Старый 21.04.2014, 16:16   #3
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Как понял задание, сделали не совсем правильно. Переменные a и b из para_chysel должны быть использованы как в elips, так и в pryama. Без объявления в производных классах дополнительных переменных. Иначе смысл наличия базового класса?

Ps: эллипс - через две ле)
Smogg вне форума Ответить с цитированием
Старый 21.04.2014, 17:14   #4
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Я и использую эти a и b в производных классах,а переменные,которые объявлены в производных классах нужны для нахождения координат,например уравнение прямой имеет следующий вид:
A x + B y + C = 0
здесь я переменные базового класса использовала как A , B и ввела еще дополнительные x,y, C. В программе я просто вывела из этого уравнения "y". Или Вы что-то другое имели в виду?
Вероника99 вне форума Ответить с цитированием
Старый 22.04.2014, 10:03   #5
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от Вероника99 Посмотреть сообщение
Я и использую эти a и b в производных классах,а переменные,которые объявлены в производных классах нужны для нахождения координат,например уравнение прямой имеет следующий вид:
A x + B y + C = 0
здесь я переменные базового класса использовала как A , B и ввела еще дополнительные x,y, C. В программе я просто вывела из этого уравнения "y". Или Вы что-то другое имели в виду?
А, вон как сделано. Да, признаюсь, особо не вчитывался. Почему-то казалось, что это очевидно - объявлять переменные в соответствии с видимостью, т.е. как можно ближе к тому месту, где они нужны. И домыслил что=то левое)
Т.е. локальные, временные переменные желательно объявлять внутри функции, а поля класса использовать для хранения более постоянных значений, характеризующих состояние объекта.

А так вроде все правильно. Разве тоько a%b дает остаток от деления, а не частное.

Последний раз редактировалось Smogg; 22.04.2014 в 10:09.
Smogg вне форума Ответить с цитированием
Старый 22.04.2014, 14:42   #6
Вероника99
Форумчанин
 
Регистрация: 15.12.2013
Сообщений: 414
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
А, вон как сделано. Да, признаюсь, особо не вчитывался. Почему-то казалось, что это очевидно - объявлять переменные в соответствии с видимостью, т.е. как можно ближе к тому месту, где они нужны. И домыслил что=то левое)
Т.е. локальные, временные переменные желательно объявлять внутри функции, а поля класса использовать для хранения более постоянных значений, характеризующих состояние объекта.

А так вроде все правильно. Разве тоько a%b дает остаток от деления, а не частное.
А да,на счет деления затупила.Спасибо)
Вероника99 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ребят выручайте есть перегруженная функция, нужно сделать из нее виртуальную функцию Выручайте23 Помощь студентам 0 12.12.2013 10:36
нахождение частного от деления a999a1 Паскаль, Turbo Pascal, PascalABC.NET 2 20.11.2013 18:14
Ругаеться на чисто виртуальную функцию dasvex Помощь студентам 24 20.08.2011 09:05
определить остаток от деления чисел dimon-nicolayev Паскаль, Turbo Pascal, PascalABC.NET 2 11.04.2011 11:02
Как изменить масштабные деления у графика на текстовые с сохранением этих делений. Tidus Microsoft Office Excel 0 19.02.2010 11:26