Переделанный Код Наследование

Тема в разделе "C/C++/C#", создана пользователем vladis222, 8 апр 2012.

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Здравствуйте, переделал вот код для программы с наследованием, работает, но когда вычисляет площадь, пишет: S=0,когда площадь не равна нулю. Помогите, понять, что за ошибка.
    <!--shcode--><pre><code class='sq1'>#include<iostream>
    #include<conio.h>
    #include<stdlib.h>
    #include<math.h>
    #include<locale>

    using namespace std;
    const float PI=3.14f; //не знаю почему выделывается но можно вот так, компилятор хавает :)

    class CPoint
    {
    protected:
    float X,Y;
    public:
    CPoint(float iX,float iY);
    ~CPoint(){}
    float GetX(); //Базовый класс-точка
    float GetY();
    };

    class CCircle:public CPoint
    {
    private:
    float Cx,Cy;
    public:
    CCircle(float iX,float iY,float iCx,float iCy);/*Класс-наследник Окружность*/
    ~CCircle(){}
    float Square(float X, float Cx, float Y, float Cy);
    };

    CPoint::CPoint(float iX,float iY)
    {
    X=iX;
    Y=iY;
    }
    float CPoint::GetX()
    {
    return X;
    }
    float CPoint::GetY()
    {
    return Y;
    }
    CCircle::CCircle(float iX, float iY,float iCx,float iCy):CPoint(iX,iY)
    {
    Cx=iCx;
    Cy=iCy;
    }
    float CCircle::Square(float X,float Cx, float Y, float Cy)
    {
    float S;
    S=PI*(pow((X-Cx),2)+pow((Y-Cy),2));
    return S;
    }
    int main(void)
    {
    setlocale(LC_ALL,"Rus");
    float X1,Y1,X2,Y2,C1x,C2x,C1y,C2y; float S1,S2,dif;
    X1=Y1=X2=Y2=C1x=C2x=C1y=C2y=dif=0;
    CCircle C1 = CCircle(X1,C1x,Y1,C1y);
    CCircle C2 = CCircle(X2,C2x,Y2,C2y);
    cout<<"Введите координаты точки первой окружности : ";
    cin>>X1>>Y1;
    cout<<"Введите координаты точки второй окружности : ";
    cin>>X2>>Y2;
    cout<<"Введите координаты центра первой окружности : ";
    cin>>C1x>>C1y;
    cout<<"Введите координаты центра второй окружности : ";
    cin>>C2x>>C2y;
    S1=C1.Square(X1,C1x,Y1,C1y);
    S2=C2.Square(X2,C2x, Y2,C2y);
    dif=S1-S2;
    if(dif=0)
    cerr<<"Ошибка. Площадь равна нулю";
    else
    {cout<<"Искомая площадь равна (кв.ед)\n";
    cout<<dif;};
    getch();
    return 0;

    }[/CODE]
     
  2. BadWolf

    BadWolf Гость

    Код (C++):
    if(dif=0) // присваивает dif значение 0 - всегда!!!!
    if (dif==0) // вот так правельно
     
  3. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    спасибо большое за помощь!!!
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Код (Text):
    const float PI=3.14f;   //не знаю почему выделывается но можно вот так, компилятор хавает :)
    В подключенном у Вас math.h определена константа M_PI и еще всякие, там же есть комментарий:
    Чтобы можно было использовать константы перед подключением math.h надо написать
    #define _USE_MATH_DEFINES
    потому что в math.h есть такой фрагмент:
    Вобщем, как-то так работает:
    Код (Text):
    #define _USE_MATH_DEFINES
    #include <math.h>
    int main(){
    double n = M_PI;
    return 0;
    }
    Добавлено:
    Код (Text):
    X1=Y1=X2=Y2=C1x=C2x=C1y=C2y=dif=0;
    CCircle C1 = CCircle(X1,C1x,Y1,C1y);
    CCircle C2 = CCircle(X2,C2x,Y2,C2y);
    cout<<"Введите координаты точки первой окружности : ";
    cin>>X1>>Y1;
    cout<<"Введите координаты точки второй окружности : ";
    cin>>X2>>Y2;
    cout<<"Введите координаты центра первой окружности : ";
    cin>>C1x>>C1y;
    cout<<"Введите координаты центра второй окружности : ";
    cin>>C2x>>C2y;
    S1=C1.Square(X1,C1x,Y1,C1y);
    S2=C2.Square(X2,C2x, Y2,C2y);
    Странная у Вас программа, ничего не изменится если написать
    Код (Text):
    S1=C1.Square(X1,C1x,Y1,C1y);
    S2=C1.Square(X2,C2x, Y2,C2y);
    Поведение объекта должно определяться его текущим состоянием, у вас же текущее состояние ни на что не влияет.
    Ваш класс эквивалентен такому:
    Код (Text):
    class CCircle{
    public:
    float Square(float X, float Cx, float Y, float Cy);
    };
    В этом случае класс вообще ненужен.
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    Вот о чем я:
    Код (Text):
    #include<iostream>
    #include<math.h>

    using namespace std;
    const float PI=3.14f;   //не знаю почему выделывается но можно вот так, компилятор хавает :)

    class CCircle {
    public:
    float Square(float X, float Cx, float Y, float Cy);
    };
    float CCircle::Square(float X,float Cx, float Y, float Cy) {
    return PI*(pow((X-Cx),2)+pow((Y-Cy),2));
    }
    int main(){
    float X1,Y1,C1y,C1x;
    float S1,S2,dif;
    CCircle C1;

    cout<<"Vvedite koordinaty tochki pervojj okruzhnosti : ";
    cin>>X1>>Y1;
    cout<<"Vvedite koordinaty centra pervojj okruzhnosti : ";
    cin>>C1x>>C1y;
    S1 = C1 .Square(X1,C1x,Y1,C1y);

    cout<<"Vvedite koordinaty tochki vtorojj okruzhnosti : ";
    cin>>X1>>Y1;
    cout<<"Vvedite koordinaty centra vtorojj okruzhnosti : ";
    cin>>C1x>>C1y;
    S2 = C1 .Square(X1,C1x,Y1,C1y);

    dif=S1-S2;
    if( 0 == dif )
    cerr<<"Oshibka. Plosсhad' ravna nulyu";
    else {
    cout<<"Iskomaya plosсhad' ravna (kv.ed)\n";
    cout<<dif;
    }

    return 0;
    }
    Думаю догадаетесь как и вовсе выкинуть отсюда класс.
     
Загрузка...

Поделиться этой страницей