Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Классы геометрических фигур

.cpp
Скачиваний:
22
Добавлен:
01.05.2014
Размер:
2.84 Кб
Скачать
#include <iostream.h>
#include <stdio.h>

class Error
{
public:
	int a;
	Error(int a1){a=a1;}
};


class Figure
{
  protected:
   int x,y;
  public:
     virtual void InputData(int,int,double)=0;
     virtual void ShowParametr()=0;
};

class Square;

class Circle: virtual public Figure
{
   protected:
     double r;
   public:
     Circle() {}
     void InputData(int x_coord,int y_coord,double rad=1) {x=x_coord; y=y_coord; r=rad;}
     void ShowParametr();
     friend void Verification(Circle c1, Square s1);
};

class Square: virtual public Figure
{
   protected:
     double a;
   public:
     //или пустые конструкторы
	 Square() {a=1;}
     void InputData(int x_coord, int y_coord, double st=1) {x=x_coord; y=y_coord; a=st;}
     void ShowParametr();
     friend void Verification(Circle c1, Square s1);
};

class IntCircle: public Circle, public Square
{
   private:

   public:
      //Вводятся координаты центры и сторона квадрата,
	  //в который д.б. вписана окружность
	  void InputData(int x_coord, int y_coord, double st) {Square::x=Circle::x=x_coord; Square::y=Circle::y=y_coord; a=st; r=a/2;}
      void ShowParametr();
};

class IntSquare: public Circle, public Square
{
   private:

   public:
      //Вводятся координаты центра и радиус окружности,
	  //в которую д.б. вписан квадрат
	  void InputData(int x_coord, int y_coord, double rad) {Circle::x=Square::x=x_coord; Circle::y=Square::y=y_coord; r=rad; a=r*1.41;}
      void ShowParametr();
};


void Circle::ShowParametr()//Вывод координат окружности
{
   cout <<"x="<<x<<";y="<<y<<";r="<<r<<"\n";
}

void Square::ShowParametr()//Вывод координат квадрата
{
   cout <<"x="<<x<<";y="<<y<<";a="<<a<<"\n";
}

void IntCircle::ShowParametr()//Вывод координат вписанной окружности
{
	cout <<"x="<<Circle::x<<";y="<<Circle::y<<";r="<<r<<"\n";
}

void IntSquare::ShowParametr()//Вывод координат вписанного квадрата
{
   cout <<"x="<<Square::x<<";y="<<Square::x<<";a="<<a<<"\n";
}

void Verification(Circle cir, Square squ)//Друг
{
	if (cir.r==squ.a/2)  cout<<"Okruzhnost' m.b. vpisana v kvadrat\n";
    else 
    if  (squ.a==(cir.r*141/100)) cout<<"Kvadrat m.b. vpisan v okruzhnost'\n";
    else throw Error(1);

}

main()
{
   try
   {
	Circle c1;
   Square s1;
   IntCircle ic1;
   IntSquare is1;
//Ввод данных 
c1.InputData(5,5);
s1.InputData(5,5,2);
ic1.InputData(2,2,2);
is1.InputData(2,2,4); 
//Вывод на экран
cout<<"Okruzhnost'  ";
c1.ShowParametr();
cout<<"Kvadrat  ";
s1.ShowParametr();
cout<<"Vpisannaya okruzhnost'  ";
ic1.ShowParametr();
cout<<"Vpisanniy kvadrat  ";
is1.ShowParametr();
Verification (c1,s1);   
   }
    catch (Error q) {cout<<"Ne mogut bit' vpisani drug v druga!\n";}
    catch (...) {cout<<"Another Error!";}
return 0;
}