Результаты работы программы

Результаты работы программы

Входные данные:

Вектор а={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(); // Ожидание нажатия клавиши

}


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



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