Результаты работы программы
Входные данные:
Вектор а={1.000000,0.000000},b={-1.000000,1.000000}
Выходные данные:
Результат вычитания a-b={2.000000,-1.000000}
Результат скалярного произведения a*b=-1.000000
Результат сложения a+b={0.000000,1.000000}
Вектор противоположный а это вектор е={-1.000000,-0.000000}
ОБЪЕКТЫ И КЛАССЫ
Класс как обобщение структуры
Пример 1. Будем использовать ключевое слово struct для определения класса двумерного вектора, для которого определены функции ввода и вывода данных, составляющих объект.
#include <iostream.h>
#include <conio.h>
// Класс вектор
struct Vector
{
double x, y; // Координаты вектора
// Функция вывода на экран координат вектора
void get()
{
cout<<"x="<<x<<' '<<"y="<<y<<'\n';
}
// Функция ввода с клавиатуры координат вектора
void put()
{
cout<<"Введите через пробел координаты вектора (x и y): ";
cin>>x>>y;
}
};
void main()
{
clrscr(); // Очистка экрана
Vector v, w[2]; // Определение векторов
v.put(); w[0].put(); w[1].put(); // Ввод координат векторов
// Вывод координат векторов
cout<<"\nКоординаты вектора v: ";
v.get();
cout<<"Координаты вектора w[0]: ";
w[0].get();
cout<<"Координаты вектора w[1]: ";
w[1].get();
getch(); // Ожидание нажатия клавиши
}
Введите через пробел координаты вектора (x и y): 12.4 3.56
Введите через пробел координаты вектора (x и y): 2.34 5.6
Введите через пробел координаты вектора (x и y): 7 8.02
Координаты вектора v: x=12.4 y=3.56
Координаты вектора w[0]: x=2.34 y=5.6
Координаты вектора w[1]: x=7 y=8.02
Пример 2. Рассмотрим подпрограмму перегрузки операции присваивания для структуры, состоящей из строки и ее длины. В теле класса эта функция объявлена как
str& operator = (const str&);
она будет возвращать адрес объекта, полученного после присваивания. Это позволит применять цепочки присваиваний, например, str1 = str2 = str3. Аргумент функции сделаем ссылочным, чтобы избежать копирования всего объекта в стек при вызове операции присваивания. В стек теперь будет сохраняться адрес объекта.
#include <string.h>
#include <iostream.h>
#include <conio.h>
// Класс строка
struct Str
{
char *s; // Указатель на строку
int len; // Длина строки
void init(const char*); // Функция инициализации строки
Str operator = (const Str); // Перегрузка операции =
};
// Перегрузка операции =
Str Str::operator = (const Str st)
{
len = st.len; // Выяснение длины новой строки
delete s; // Удаление старого содержимого
s = new char[len + 1]; // Выделение памяти под новую строку strcpy(s, st.s); // Копирование строки
return *this; // Возвращение полученной строки по значению
}
// Функция инициализации строки
void Str::init(const char* s)
{
len = strlen(s); // Выяснение длины строки
Str::s = new char[len + 1]; // Выделение памяти под строку strcpy(Str::s, s); // Копирование строки
}
void main()
{
clrscr(); // Очистка экрана
Str str1, str2, str3; // Создание строк
str1.init("Пирамида"); // Инициализация первой строки
str3 = str2 = str1; // Присваивание значения первой строки
// остальным двух строкам
cout<<"Объект str3 = " << str3.s << '\n'; // Вывод третьей строки
getch(); // Ожидание нажатия клавиши
}