С++ для начинающих



         

Класс массива с множественным наследованием - часть 2


return Array_RC<Type>::operator[]( index );

он вызывается явно, и механизм виртуализации не применяется. Поскольку это встроенная функция, то при статическом вызове компилятор подставляет ее код в место вызова.

Теперь протестируем нашу реализацию с помощью функции try_array(), передавая ей по очереди классы, конкретизированные из шаблона Array_RC_S типами int и string:

#include "Array_RC_S.h"

#include "try_array.C"

#include <string>

int main()

{

    static int ia[ 10 ] = { 12,7,14,9,128,17,6,3,27,5 };

    static string sa[ 7 ] = {

               "Eeyore", "Pooh", "Tigger",

               "Piglet", "Owl", "Gopher", "Heffalump"

    };

    Array_RC_S<int> iA( ia,10 );

    Array_RC_S<string> SA( sa,7 );

    cout << "конкретизация класса Array_RC_S<int>"

         << endl;

    try_array( iA );

    cout << "конкретизация класса Array_RC_S<string>"

         << endl;

    try_array( SA );

    return 0;

}

Вот что печатает программа для класса, конкретизированного типом string (теперь ошибка выхода за границы массива перехватывается):

конкретизация класса Array_Sort<string>

try_array: начальные значения массива

( 7 )< Eeyore, Gopher, Heffalump, Owl, Piglet, Pooh

       Tigger >

try_array: после присваиваний

( 7 )< Eeyore, Gopher, Owl, Piglet, Pooh, Pooh

       Pooh >

try_array: почленная инициализация

( 7 )< Eeyore, Gopher, Owl, Piglet, Pooh, Pooh

       Pooh >

try_array: после почленного копирования

( 7 )< Eeyore, Piglet, Owl, Piglet, Pooh, Pooh

       Pooh >

try_array: после вызова grow

( 7 )< <empty>, <empty>, <empty>, <empty>, Eeyore, Owl

       Piglet, Piglet, Pooh, Pooh, Pooh >

искомое значение: Tigger           возвращенный индекс: -1

Assertion failed: ix >= 0 && ix < size




Содержание  Назад  Вперед