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




 

 

 

Статические элементы класса

 

Пример. Определим класс строки, содержащий подпрограмму, возвращающую количество объектов этого класса, находящихся в области видимости. Определим статическую переменную many целого типа. Конструктор объекта будет увеличивать эту переменную на 1, а деструктор – уменьшать на 1. Распределение области памяти, занимаемой объектами класса, приведено на рис. 2.1.

 

Int many - поле, содержащееся в каждом объекте
Объект char *s int length Объект char *s int length · · · Объект char *s int length - поля объектов, содержащие указатели на строки и длины строк
         

 

 

Приведём текст программы:

 

#include <iostream.h>

#include <conio.h>

#include <string.h>

 

class Vstring

{

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

static int many; // Количество объектов Vstring

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

int length; // Длина строки

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

Vstring(char *text) // Конструктор

{

length = strlen(text); // Вычисление длины

s = new char[length+1]; // Выделение памяти

strcpy(s, text); // Копирование строки

many++; // Увеличение числа объектов

}

 

 

~Vstring() // Деструктор

{

delete s; // Освобождение памяти

many--; // Уменьшение числа объектов

}

 

static int Number() { return many; } // Статическая функция

 

// Общая функция

void get()

{

cout << s << '\n';

}

};

 

int Vstring::many = 0; // Установка начального числа объектов

 

void main()

{

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

 

cout << "Количество объектов Vstring: " << Vstring::Number() << '\n';

 

Vstring u("12345");

cout << "Количество объектов Vstring: " << Vstring::Number() << '\n';

 

Vstring v("12345");

cout << "Количество объектов Vstring: " << Vstring::Number() << '\n';

 

cout << "Значение объекта v: ";

v.get();

cout << '\n';

 

for(int i = 0; i < 3; i++)

{

cout<<"Количество объектов Vstring: "<<Vstring::Number()<<'\n';

Vstring v("12345");

cout<<"Количество объектов Vstring: "<<Vstring::Number()<<'\n';

getch();

}

}

 

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

 

Количество объектов Vstring: 0

Количество объектов Vstring: 1

Количество объектов Vstring: 2

Значение объекта v: 12345

 

Количество объектов Vstring: 2

Количество объектов Vstring: 3

Количество объектов Vstring: 2

Количество объектов Vstring: 3

Количество объектов Vstring: 2

Количество объектов Vstring: 3

 

Шаблоны функций

 

Например, максимум двух значений типа Т можно вычислять с помощью функции:

 

template <class T> // Ключевое слово и параметр

const T& Max(const T& a, const T& b)

{

return a>b? a:b;

}

 

void main()

{

int i = 1, j = 2;

float r = 1.1, s = 1.2;

int k = Max(i, j);

float t = Max(r, s);

}

 

 

Пример. Параметризованная функция бинарного поиска в отсортированном массиве.

 

#include <iostream.h>

#include <conio.h>

template <class Type>

int binsearch(Type* x, int count, Type key)

{

int low, high, mid; // Левый, правый и средний элементы

low = 0; high = count - 1;

 

while (low <= high)

{

mid = (low+high)/2; // Вычисление середины массива

 

if(key < x[mid]) high = mid - 1; // Если нужный элемент

// находится слева от середины

else if(key > x[mid]) low = mid + 1; // Если справа

else return mid; // Нашли

}

 

return -1; // Не нашли

}

 

void main()

{

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

 

int nums[] = {1, 2, 3, 5, 7, 11, 13, 17}; // Массив, в котором ищем

cout << "5 находится на " << binsearch(nums, 8, 5)

cout << " месте в массиве.";

 

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

}

 



Поделиться:




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

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


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