Главная страница
Навигация по странице:

  • Object

  • Delegate

  • Double

  • Delegate Sub

  • As Single

  • Function

  • Лекции. Основные понятия и определения


    Скачать 1.94 Mb.
    НазваниеОсновные понятия и определения
    Дата27.03.2018
    Размер1.94 Mb.
    Формат файлаdocx
    Имя файлаЛекции.docx
    ТипКонтрольные вопросы
    #39570
    страница29 из 58
    1   ...   25   26   27   28   29   30   31   32   ...   58

    10.8. Тип object (B)


    Данные типа Object могут содержать значения других типов данных во время выполнения одной программы. Переменные этого типа или, вообще, не имеют определения (неявное объявление) или объявляются с ключевым словом Object: Dim <имя_переменной> As Oblect.

    Переменная такого типа содержит адрес объекта, который был ей присвоен. Этот адрес всегда занимает 4 байта памяти, однако надо иметь в виду, что под само значение также выделяется память.Таким образом можно считать, что переменная типа Object занимает 4 байта+объем под значение. В выражениях переменные типа Object ведут себя в соответствии с типом присвоенного значения. Если было присвоено значение типа Integer, то переменная работает как целая, если – типа String, то – как строка. Транслятор сам распознает внутренний тип переменной.

    Замечание. На первый взгляд применение данных этого типа удобно. Их можно не объявлять, не думать о преобразованиях значений в выражениях, предоставляя это транслятору. Однако есть следующие возражения:

    - данные занимают, в общем случае, больше памяти, чем переменные обычных типов;

    - их употребление может привести к труднообнаруживаемым ошибкам.

    Например, оператор "+" применим и к числовым, и к строковым данным. В первом случае он выполняет операцию сложения, во втором – сцепление.

    Пример.

    a="10"

    b="11"

    a+b → "1011"

    b=11

    a+b → 21

    Если один операнд типа Object содержит числовое значение, а второй – строковое, то второй операнд будет преобразован в число, если это возможно, если нет, то возникнет ошибка Type mismatch (Несогласование типов). При необходимости получения строкового результата нужно использовать оператор "&".

    Рекомендация. По возможности не следует использовать данные типа Object. По крайней мере, это надо делать при достаточном опыте программирования.

    10.9. Тип delegate (B)


    Этот тип может выполнять ту же функцию, что объект языка C++ - указатель на функцию. Данные этого типа объявляются на уровне модуля вне процедур как новый тип данных и доступны всем модулям программы.

    Формат объявления:

    Delegate {Function | Sub} <имя> ([<список параметров>]) [As <тип>]

    Для подпрограммы тип возвращаемого значения отсутствует.

    Пример. Объявление типа UndInteg для вызова любого функции (метода), принимающего 1 параметр типа Double и возвращающего значение типа Double. См. интегрирование методом трапеций в разделе 7.3.2.

    Delegate Function UndInteg(ByVal x As Double) As Double

    Для функций, имеющих другой список параметров и тип возвращаемого значения (или его не имеющего для Sub) надо объявлять другой тип делегата.

    Пример. Для обычного и максиминного умножения матриц.

    Delegate Sub MultMatrix(ByVal m As Short, ByVal n As Short, _

    ByVal p As Short, ByRef a(,) As Single, _

    ByRef b(,) As Single, ByRef c(,) As Single)

    В вызывающей процедуре должны объявляться переменные типа делегата, которым можно задавать адреса нужных функций.

    Пример.

    Dim DelF1 As UndInteg ' Переменная типа делегата

    …………………………..

    DelF1=AddressOf F1 ‘ Задание адреса функции F1

    ………………………….

    ' Передача адреса подинтегральной функции в процедуру интегрирования

    y = Integr(0.15, alfa, 200, DelF1)

    Функция Integr имеет следующий заголовок:

    Function Integr(ByVal a AsDouble, ByVal b AsDouble, ByVal k As Short, _

    ByRef F As UndInteg)

    Параметр F имеет тип делегата UndInteg и может принимать адрес любой подинтегральной функции, что делает процедуру интегрирования универсальной.
    1   ...   25   26   27   28   29   30   31   32   ...   58


    написать администратору сайта