Пример 1: Классы, описывающие точку, окружность и конус

// файл 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;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: