ИЗГОТОВЛЕНИЕ НЕСТАНДАРТНЫХ БИБЛИОТЕК С++

advertisement
ИЗГОТОВЛЕНИЕ НЕСТАНДАРТНЫХ
БИБЛИОТЕК С++
Выполнил студент Ляжков
Сергей. Группа 13604/1
ПРЕДПОСЫЛКА
• Когда мы пишем программу на языке C++, мы в самом начале
используем встроенные библиотеки, чтобы программа работала. В
традиционном процедурно-ориентированном программировании
долгое время среди разработчиков программного обеспечения
было принято предоставлять программистам библиотеки функций. С
помощью их комбинирования и добавления собственных процедур
и функций получалась программа. Библиотеки обычно содержат
очень широкий спектр готовых функций, пригодных для различного
применения.
• Поскольку язык C++ построен на классах, неудивительно, что
библиотеки этих программ на этом языке также состоят из классов.
Они представляют собой совокупность данных и функций для их
обработки, а также они лучше моделируют реальную жизнь.
• При разработке приложений оказывается, что если доступны
необходимые библиотеки, то для создания полнофункционального
продукта необходим минимум ручной работы по
программированию. К тому же необходимо учитывать, что создается
все больше и больше библиотек, а значит, больший спектр
различного программного обеспечения можно создавать без
лишних проблем. Крайне важный пример библиотеки классов –
Стандартная библиотека C++.
Интерфейс и реализация
• Обычно библиотека классов состоит из интерфейса и
реализации. Для того, чтобы библиотеку можно было
использовать, программисту необходим доступ к
различным определениям, включая определение
классов. Они представляют собой общедоступную часть
библиотеки и обычно представляются в виде
заголовочного файла с расширением .h. Объявления в
заголовочных файлах должны быть общедоступными.
Только с помощью объявлений классов в виде
исходного кода возможно создавать объекты
библиотечных классов. Речь идет об интерфейсе.
• Реализация – это содержимое библиотечных классов.
Цель СОЗДАНИЯ БИБЛИОТЕК
• Любой огромный проект разрабатывается
группой программистов. Разграничив круг задач,
поставленных перед каждым, можно решение
каждой проблемы выделить в виде отдельного
файла. Такой подход позволяет лучше
организовывать работу команды и более четко
определять взаимодействие частей программы.
•
•
Примеры
кодов
#pragma once
#include <iostream>
• #include<math.h>
• using namespace std;
•
•
•
•
•
•
•
•
•
•
•
class Complex
{
private:
double re; - действительная часть
double im; = мнимая часть
public:
Complex(double r)
{
re = r;
im = 0;
}
• Complex(double r, double i)
{
re = r; - действительная часть
im = i; - мнимая часть
}
Complex(const Complex &C)
{
re = C.re; экземпляр Complex с именем C
im = C.im;
}
~Complex() {};-уничтожение копии конструктора
• double count()
{
return sqrt(re*re + im*im);-модуль комплексного числа
}
• Complex& operator=(const Complex &C) – оператор присваивания
{
re = C.re;
im = C.im;
return(*this);
}
Complex& operator+(const Complex &C)
{
return Complex(re + C.re, im + C.im); (правило сложения точек)
}
•
•
•
•
•
•
Complex& operator*(const Complex &C)
{
return Complex(re*C.re - im*C.im, re*C.im + im*C.re);-новое комплексное число , полученное
путем умножения.(правило умножения точек)
}
Complex& operator / (const Complex &C)
{
Complex n;
double f = (C.re*C.re + C.im*C.im);
n.re = (re*C.re + im*C.im) / f;
n.im = (im*C.re - re*C.im) / f;
return n;
}
ostream & operator<< (ostream &, const Complex &);
istream & operator>> (istream &, Complex &);
};
ostream& operator<< (ostream &out, const Complex &C)-вывод комплексного числа на экран
{
out << "(" << C.re << "+ " << C.im << "i"<<")";
return out;
}
istream& operator>> (istream &in, Complex &C) –ввод действительного и мнимого значения.
{
in >> C.re >> C.im;
return in;
}
Использование данной библиотеки
•
•
•
•
•
•
#include"stdafx.h"
#include<iostream>
#include<math.h>
#include"Complex.h – включение библиотеку комплексных чисел в программу
using namespace std;
int main()
{
Complex a(5, 2);
Complex b(-1, 3);
Complex c1 = a + b; сложение комплексных чисел
Complex c2 = a - b; вычитание комплексных чисел
Complex c3 = a*b; умножение комплексных чисел
Complex c4 = a / 2 * b;
cout << c1 << "\n";
cout << c2 << "\n";
cout << c3 << "\n";
cout << c1*c1 + c2*c2 << "\n";
system("pause");
return 0;
}
ВЫВОД
• С помощью класса «Complex» была создана
библиотека комплексных чисел(она находится
в стандарте С99). Ее можно спокойно
использовать при работе с этими числами.
Именно так можно создать нестандартную
библиотеку в отдельном файле, чтобы в
другом файле, используя ее, написать
отдельную программу. Это может иметь
недостаток: целая программа может
нескомпилироваться в результате ошибки в
создании библиотеки. Зато одну работу
можно распределить среди нескольких
программистов.
СВОЙ ПРИМЕР
•
•
•
•
#pragma once
#include <iostream>
#include <math.h>
using namespace std;
•
•
•
•
•
•
•
•
•
•
class Vector
{
private:
int x;
int y;
int z;
public:
Vector(int xx = 0, int yy = 0, int zz = 0)-конструктор по умолчанию
{
x = xx;-присваивание значениям координаты вектора
переменными из private
y = yy;
z = zz;
}
•
•
•
•
•
•
•
•
•
int getx() const { return x; }
int gety() const { return y; }-функция, возвращающая постоянные значения
координат вектора
int getz() const { return z; }
•
void setx(int xx) { x = xx; }
void sety(int yy) { y = yy; } – функция, позволяющая действовать с
координатами вектора
void setz(int zz) { z = zz; }
•
};
•
•
•
•
•
•
ostream & operator << (ostream & os, const Vector &ob)
{
os << "{ ";
os << ob.getx() << ", "; - вывод копии значения х
os << ob.gety() << ", "; - вывод копии значения у
os << ob.getz() << " }"; - вывод копии значения z
•
•
return os;
}
• Vector operator+(const Vector & a, const Vector & b)
• {
•
Vector c;
•
c.setx(a.getx() + b.getx());-сложение векторов
•
c.sety(a.gety() + b.gety());
•
c.setz(a.getz() + b.getz());
•
return c;
• }
• Vector operator*(const Vector & a, const Vector & b)
• {
•
Vector c;
•
c.setx(a.gety()*b.getz() - a.getz()*b.gety());
•
c.sety(a.getz()*b.getx() - a.getx()*b.getz());
•
c.setz(a.getx()*b.gety() - a.gety()*b.getx());
•
return c;
• }
•
•
•
•
•
•
•
.
#include<iostream>
#include”Vector.h”- включение библиотеку векторов для main
Using namespace std;
int main()
{
Vector a(1, 2);
Vector b(1, 5, 7);
•
•
•
•
cout << a << endl;
cout << b << endl;
cout << a + b << endl;
cout << a*b << endl;
•
system("pause");
•
• }
return 0;
Список литературы
• Р.Лафоре
• «Объектно-ориентированное
программирование», 4-е издание
Download