Наследование В С++

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

  1. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    Здравствуйте! Прошу помощи в лабораторной работе по наследованию, у меня задание вычислить площадь круга, которая образуется при удалении из него вписанного круга. Сделать наследование с помощью класса точка. Я по нашему примеру в методичке написал код, но выдается 11 ошибок. Подскажите, пожалуйста, что в нем не так?

    <!--shcode--><pre><code class='sq1'>#include<iostream>
    using namespace std;
    #include<conio.h>
    #include<stdlib.h>
    #include<math.h>
    const float PI=3.14;

    class CPoint
    {
    protected:
    float x,y;
    public:
    CPoint(float ix,float iy);
    ~CPoint();
    float GetX(); /*Базовый класс-точка*/
    float GetY();
    int SetX(float);
    int SetY(float);
    };

    class CCircle:public CPoint
    {
    private:
    float cx,cy;
    public:
    CCircle(float ix,float iy, float icx,float icy);/*Класс-наследник Окружность*/
    ~CCircle();
    float Square();
    };
    CPoint::CPoint(float ix,float iy)
    {
    x=ix;
    y=iy;
    }
    float CPoint::GetX()
    {
    return x;
    }
    float CPoint::GetY()
    {
    return y;
    }
    CPoint::~CPoint(){}
    CCircle::CCircle(float ix, float iy, float icx,float icy):CPoint(float ix,float iy)
    {
    if((pow(x-cx,2)+pow(y-cy,2))<0)
    {
    cout<<"Радиус не должен быть отрицательным";
    exit(-1);
    }
    cx=icx;
    cy=icy;
    }
    float CCircle::Square()
    {
    float S;S=PI*((pow(x-cx,2)+pow(y-cy,2));
    return S;
    }
    int main()
    {
    float x,y,cx,cy,dif;
    CCircle C1;
    CCircle C2;
    cout<<"Введите координаты точки окружности : ";
    cin>>x>>y;
    cout<<"Введите координаты центра окружности : ";
    cin>>cx>>cy;
    C1.Square();
    C2.Square();
    dif=C2.Square()-C1.Square();
    cout<<"Искомая площадь равна\n";
    cout<<dif;
    getch();
    }[/CODE]
     
  2. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    мало ошибок, должно быть больше.
    У вас точка имеет поля -координаты - и это нормально.
    Затем, вы говорите что окружность - это точка, но имеющая еще 2 поля и предоставляющая специфические методы.
    По определению окружность - это множество точек равноудаленных от заданной, но никак не особый вид точки - и это уже неверно.

    Окружность, можно задать по-разному, например через координаты центра и радиус, а как это сделано у вас я не понял(что за поля cx и cy в классе окружности? ).

    Дальше еще больше бреда.
    Код (Text):
    CCircle C1;
    CCircle C2;
    cin>>x>>y;
    cin>>cx>>cy;
    dif=C2.Square()-C1.Square();
    В первых двух строчках используется конструктор без параметров, но класс окружности не предоставляет такого. Затем, вы считываете какие-то числа(координаты окружностей, наверное), но считанные они так и остаются видимы лишь внутри функции main, на свойства объектов они никак не влияют, а значит, когда в последней строчке вызывается метод Square, использующий значения полей - вы получаете ошибки(ведь поля не инициализированы).

    Да и вообще, тут все неправильно.
     
  3. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    То, что я записал в окружности 2 поля cx и сy,x,y,я имел ввиду что окружность состоит из точки на окружности и центра окружности.То есть, окружность наследует класс точку: имеет 2 поля-точку на окружности и центр окружности.
     
  4. vladis222

    vladis222 Active Member

    Регистрация:
    6 дек 2011
    Сообщения:
    31
    Симпатии:
    0
    <!--shcode--><pre><code class='sq1'>#include<iostream>
    using namespace std;
    #include<conio.h>
    #include<stdlib.h>
    #include<math.h>
    const float PI=3.14;

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

    class CCircle:public CPoint
    {
    private:
    float Radius;
    public:
    CCircle(float iX,float iY,float iRadius );/*Класс-наследник Окружность*/
    ~CCircle();
    float Square(float Radius);
    };
    CPoint::CPoint(float iX,float iY)
    {
    X=iX;
    Y=iY;
    }
    float CPoint::GetX()
    {
    return X;
    }
    float CPoint::GetY()
    {
    return Y;
    }
    CPoint::~CPoint(){}
    CCircle::CCircle(float iX, float iY,float iRadius):CPoint( iX,iY)
    {
    if(iRadius<=0.0)
    {
    cout<<"Радиус не должен быть отрицательным";
    exit(-1);
    }
    Radius=iRadius;
    }
    float CCircle::Square(float Radius)
    {
    float S;S=PI*pow(Radius,2);
    return S;
    }
    int main()
    {
    float x,y,Radius,dif;
    CCircle C1(float iX,float iY,float iRadius);
    CCircle C2(float iX,float iY,float iRadius);
    cout<<"Введите координаты точки окружности : ";
    cin>>x>>y;
    cout<<"Введите радиус окружности : ";
    cin>>Radius;
    C1.Square(float Radius);
    C2.Square(float Radius);
    dif=CCircle C2.Square(float Radius)-CCircle C1.Square(float Radius);
    cout<<"Искомая площадь равна\n";
    cout<<dif;
    getch();
    }
    }[/CODE] Переделанный код к программе, но все равно ошибки есть
     
  5. rrrFer

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

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    наплодили тем...Ответил в соседней
     
Загрузка...
Похожие Темы - Наследование С++
  1. Dragon108
    Ответов:
    23
    Просмотров:
    5.536
  2. vladis222
    Ответов:
    4
    Просмотров:
    1.621
  3. Stashevckiy
    Ответов:
    10
    Просмотров:
    3.162
  4. olimp72
    Ответов:
    2
    Просмотров:
    2.441
  5. xKlonx
    Ответов:
    2
    Просмотров:
    3.458

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