// файл point.h:
#include <iostream>
using namespace std;
// Класс, описывающий точку:
class Point
{
protected:
double x, y;
private:
//---------------------------------------------------------
friend istream& operator >> (istream& is, Point& p)
{
cout << "Задайте координаты точки ";
return is >> p.x >> p.y;
}
friend ostream& operator << (ostream& os, const Point& p)
{
return os << "коордиаты точки: [" <<
p.x << ", " << p.y << "]\n";
}
//----------------------------------------------------------------
public:
Point(double _x=0, double _y=0)
{ x = _x; y =_y;}
};
// файл circle.h:
// Класс, описывающий окружность:
#include "point.h"
#define _USE_MATH_DEFINES
#include <math.h>
class Circle: public Point // Класс Point является базовым для класса Circle
{
friend istream& operator >> (istream& is, Circle& c)
{
cout << "Задайте координаты центра ";
return is >> c.x >> c.y;
cout << "Задайте радиус ";
is >> c.r;
}
friend ostream& operator << (ostream& os, const Circle& c)
{
return os << "Радиус: " << c.r << ", " << Point(c.x, c.y);
// Пример использования функции базового класса
}
//----------------------------------------------------------------
protected:
double r; // радиус окружности
public:
// конструктор:
|
|
Circle (double _x = 0, double _y = 0, double _r = 0): Point (_x, _y)
{ r = _r;}
double Area ()
{return M_PI* r *r;} // площадь круга
};
// файл cone.h:
// класс, описывающий конус
#define _USE_MATH_DEFINES
#include <math.h>
#include "circle.h"
class Cone: public Circle // класс Cone является производным от класса Circle
{
double h; // высота конуса
friend istream& operator >> (istream&, Cone&);
friend ostream& operator << (ostream&, const Cone&);
public:
//Основной конструктор:
Cone(double _x = 0, double _y = 0, double _r = 0, double _h = 0):
Circle(_x, _y, _r) { h =_h; }
// Конструктор копирования:
Cone(const Cone& cn) { h = cn.h;}
//Функции доступа к закрытым членам:
double Get_h() const {return h;}
//Функции установки значений закрытых членов:
void Set_h(double _h) {h = _h;}
double Volume() { return h * Area() / 3; } // объем конуса
};
//==============================================
// Определение функций:
istream& operator >> (istream& is, Cone& cn)
{
cout << "Задайте координаты центра основания и радиус основания ";
is >> cn.x >> cn.y >> cn.r;
cout << "Задайте высоту конуса ";
return is >> cn.h;
}
ostream& operator << (ostream& os, const Cone& cn)
{
os << "Высота конуса: " << cn.h << " ";
return os << Circle(cn.r, cn.x, cn.y) << endl;
}
// пример использования класса:
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <iomanip>
#include "cone.h"
using namespace std;
int main()
{
//Настройки шрифтов и региональных стандартов:
if(SetConsoleCP(1251)==0)
//проверка правильности установки кодировки символов для ввода
{
cerr<<"Fialed to set codepage!"<<endl;
/* если не удалось установить кодовую страницу, вывод сообщения об ошибке */
}
if(SetConsoleOutputCP(1251)==0)//тоже самое для вывода
{
cerr<<"Failed to set OUTPUT page!"<<endl;
}
Point pt(200,200);
cout<<pt;
cin>>pt;
cout<<pt;
Circle cr(300,200,20);
cout<<cr;
cin>>cr;
cout<<cr<<"площадь окружности"<<cr.Area()<<endl;
|
|
Cone cn(450, 200, 50, 90);
cout << "Объем конуса: " <<
setiosflags(ios::fixed) << setprecision(2) << cn.Volume() << endl;
_getch();
return 0;
}