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

vladis222

Active member
06.12.2011
31
0
#1
Здравствуйте! Прошу помощи в лабораторной работе по наследованию, у меня задание вычислить площадь круга, которая образуется при удалении из него вписанного круга. Сделать наследование с помощью класса точка. Я по нашему примеру в методичке написал код, но выдается 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]
 
R

rrrFer

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

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

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

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

vladis222

Active member
06.12.2011
31
0
#3
мало ошибок, должно быть больше.
У вас точка имеет поля -координаты - и это нормально.
Затем, вы говорите что окружность - это точка, но имеющая еще 2 поля и предоставляющая специфические методы.
По определению окружность - это множество точек равноудаленных от заданной, но никак не особый вид точки - и это уже неверно.

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

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

Да и вообще, тут все неправильно.
То, что я записал в окружности 2 поля cx и сy,x,y,я имел ввиду что окружность состоит из точки на окружности и центра окружности.То есть, окружность наследует класс точку: имеет 2 поля-точку на окружности и центр окружности.
 

vladis222

Active member
06.12.2011
31
0
#4
То, что я записал в окружности 2 поля cx и сy,x,y,я имел ввиду что окружность состоит из точки на окружности и центра окружности.То есть, окружность наследует класс точку: имеет 2 поля-точку на окружности и центр окружности.
<!--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] Переделанный код к программе, но все равно ошибки есть