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




 

Объект str3 = Пирамида

 

Определение первичного класса

 

Пример. Определим класс, объектом которого является стек целых чисел. Для инициализации стека определим дружественную функцию. Для записи элемента в стек и для чтения элемента из стека определим функции Push() и Pop().

 

#include <iostream.h>

#include <conio.h>

 

// Описание класса - целочисленный стек

class IntStack

{

// Закрытые элементы

int *v; // У нас стек будет реализован в виде массива

int size, top; // Размер стека и положение вершины

public: // Общедоступные элементы

friend IntStack init(int size); //Дружественная функция //инициализации стека

int pop(); // Извлечение числа из вершины стека

void push(int x); // Занесение числа в стек

};

 

// Инициализации стека

IntStack init(int size)

{

IntStack res; // Создаём новый стек

res.v=new int [size]; // Выделяем память под массив

res.size=size; // Указываем размер стека

res.top=size; // Устанавливаем вершину стека

return res; // Возвращаем созданный стек

}

 

// Занесение числа в стек

inline void IntStack::push(int x)

{

if(top>0) v[--top]=x;

}

 

// Извлечение числа из стека

inline int IntStack::pop()

{

if(top<size) return v[top++];

else return 0;

}

 

void main()

{

clrscr(); // Очистка экрана

 

IntStack s1, s2; // Создание стеков

 

s1=init(10); s2=init(20); // Инициализация стеков

 

cout<<"Заносим в стек s1 число -3\n";

s1.push(-3);

 

cout<<"Заносим в стек s2 число 1\n";

s2.push(1);

 

cout<<"Заносим в стек s1 число -2\n\n";

s1.push(-2);

 

cout<<"Извлекаем из стека s1 первое число "<<s1.pop();

cout<<", затем второе "<<s1.pop()<<'\n';

 

cout<<"Извлекаем из стека s2 число "<<s2.pop()<<'\n';

 

getch(); // Ожидание нажатия клавиши

}

 

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

 

Заносим в стек s1 число -3

Заносим в стек s2 число 1

Заносим в стек s1 число -2

 

Извлекаем из стека s1 первое число -2, затем второе -3

Извлекаем из стека s2 число 1

 

 

Перегрузка операций

Например, для класса строки операцию сравнения относительно лексикографического (алфавитного) порядка можно определить с помощью приведённой ниже составной функции:

 

#include <string.h>

 

class String

{

char *s;

int len;

public:

int operator<(String st)

{

return strcmp(s,st,s)<0;

}

};

 

То же самое с помощью дружественной функции определяется следующим образом

 

#include <string.h>

 

class String

{

char *s;

int len;

public:

friend int operator<(String, String);

};

 

operator<(String str1, String str2)

{

return strcmp(str1.s, str2.s)<0;

}

 

Пример. Пусть класс определен как строка символов. Определим операцию индексации, позволяющую читать и записывать i -й символ строки:

 

#include <string.h>

#include <conio.h>

#include <iostream.h>

 

// Класс строка

class String

{

// Закрытые элементы

char *s; // Сама строка

int len; // Её длина

public: // Общедоступные элементы

 

// Перегрузка операции []

char& operator[](int pos)

{

return s[pos];

}

 

// Инициализация строки

void init(char *s)

{

len=strlen(s); // Определение длины

String::s=new char[len+1]; // Выделение памяти под строку

strcpy(String::s, s); // Присваивание

}

 

 

// Вывод строки на экран

void show()

{

cout<<s<<'\n';

}

};

 

void main()

{

clrscr(); // Очистка экрана

 

String a; // Создаём строку

a.init("abc"); // Инициализируем её

cout<<"Начальное содержимое строки: ";

a.show(); // Выводим строку на экран

 

a[1]='c';

cout<<"Содержимое строки после операции a[1]=\'c\': ";

a.show(); // Выводим строку на экран

a[0]='b';

cout<<"Содержимое строки после операции a[0]=\'b\': ";

a.show(); // Выводим строку на экран

cout<<"Содержимое строки после операции a[0]=a[2]: ";

a[0]=a[2];

a.show(); // Выводим строку на экран

 

getch(); // Ожидание нажатия клавиши

}

 

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

 

Начальное содержимое строки: abc

Содержимое строки после операции a[1]='c': acc

Содержимое строки после операции a[0]='b': bcc

Содержимое строки после операции a[0]=a[2]: ccc

 

Конструкторы

 

Пример. Определим класс двумерного вектора. Будем инициализировать его с помощью полярных координат:

 

#include <iostream.h>

#include <math.h>

#include <conio.h>

 

class Vector

{

double x, y;

public:

Vector(double rho, double phi);

 

void show()

{

cout << "Вектор = ("<< x << ", " << y << ")\n";

}

};

 

Vector::Vector(double rho, double phi = 0)

{

x = rho*cos(phi);

y = rho*sin(phi);

}

 

void main()

{

clrscr();

 

Vector v(1), w(-1, 0.5);

v.show(); w.show();

 

getch();

}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-12-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: