C++. Введение в классы и объекты. Конструкторы и деструкторы, страница 6

27

  • Статический метод – это по сути глобальная функция, область видимости которой ограничена именем класса, поэтому (если она public) фактически вызвать ее можно, указывая имя класса и спецификатор области видимости, но формально она является членом класса, поэтому вызывать ее можно также посредством объекта или указателя на объект.
  • Основные отличия статического метода класса от обычного:
    • указатель this в статических методах не существует;
    • Чтобы обратиться к нестатическим полям класса в статическом методе нужно им передать объект как параметр;

28

  • Указатель на функцию
  • Объявление указателя на функцию:
  • тип (*имя_указателя)(типы параметров функции)
  • Указатель на функцию как параметр функции. Функция qsort
  • Прототип функции qsort (stdlib.h (С), cstdlib (С++):
  • void qsort(void* first, size_t num, size_t size,
  • int (* comp) (const void*, const void*));
  • Параметры:
    • first - указатель на первый элемент сортируемого массива;
    • num - количество элементов в сортируемом массиве, на который ссылается указатель first;
    • size - размер одного элемента массива в байтах;
    • comp – указатель на функцию, которая сравнивает два элемента массива. Функция должна иметь следующий прототип:
      • int compare(const void* v1, const void* v2)

29

  • В определении указателя на функцию количество и тип параметров должны совпадать с соответствующими типами в определении функции, на которую ставится указатель.
  • Присвоение указателю на функцию адреса функции не требует операции взятие адреса (&), поскольку имя функции само по себе обозначает этот адрес.
  • Функция qsort выполняет сортировку num элементов массива, на который ссылается указатель first. Для каждого элемента массива устанавливается размер в байтах, который передается через параметр size. Последний параметр функции qsort— указатель comp на функцию сравнения, которая используется для определения порядка следования элементов в отсортированном массиве.
  • Функция сравнения (compare) имеет два параметра  - не типизированные указатели (void* v1, void* v2) на элементы массива. Эти параметры должны быть приведены к указателям на те типы данных, которые имеют элементы массива. Возвращаемое значение этой функции должно быть отрицательным, положительным или равным нулю.  Если необходимо выполнить сортировку элементов массива по возрастанию, то если *v1  < *v2, тот функция должна вернуть отрицательное значение, если *v1  > *v2, тот функция должна вернуть положительное значение, если *v1  == *v2, тот функция должна вернуть ноль.

30

Пример 11. Использование функции qsort #include <iostream> #include <cstdlib> using namespace std; int vector[] = { 14, 10, 11, 19, 2, 25 }; int compare(const void * x1, const void * x2) {if (*(int*)x1 < *(int*)x2) return -1; else if (*(int*)x1 > *(int*)x2) return 1; else return 0; } int main () { qsort(vector, 6, sizeof(int), compare); for ( int i = 0; i < 6; i++) cout << vector[i] << " "; return 0; }

31

  • Контрольные вопросы
  • Понятие класса в С++. Синтаксис описания класса в С++. Понятие интерфейса и реализации класса. Примеры.
  • Понятие, назначение и основные свойства конструкторов и деструкторов. Виды конструкторов, примеры их использования.
  • Понятие объекта в С++. Варианты создания объекта в С++: синтаксис и примеры. Как организуется доступ к полям и методам объекта, объявленным в секциях private и public?
  • Способы создания массива объектов, примеры. Сортировка объектов с использованием функции qsort().
  • Статические поля и методы класса: назначение, синтаксис описания и примеры использования

32