Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






  • Как продвинуть сайт на первые места?
    Вы создали или только планируете создать свой сайт, но не знаете, как продвигать? Продвижение сайта – это не просто процесс, а целый комплекс мероприятий, направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
    Ускорение продвижения
    Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
    Начать продвижение сайта
  • Листинг 19.2. Использвание шаблона массива






    1: #include < iostream.h>

    2:

    3: const int DefaultSize = 10;

    4:

    5: // обычный класс Animal для

    6: // создания массива животных

    7:

    8: class Animal

    9: {

    10: public:

    11: Animal(int);

    12: Animal();

    13: ~Animal() { }

    14: int GetWeight() const { return itsWeight; }

    15: void Display() const { cout < < itsWeight; }

    16: private:

    17: int itsWeight;

    18: };

    19:

    20: Animal:: Animal(int weight):

    21: itsWeight(weight)

    22: { }

    23:

    24: Animal:: Animal():

    25: itsWeight(0)

    26: { }

    27:

    28:

    29: template < class T> // обьявляем шаблон и параметр

    30: class Array // параметризованный класс

    31: {

    32: public:

    33: // конструкторы

    34: Array(int itsSize - DefaultSize);

    35: Array(const Array & rhs);

    36: ~Array() { delete [] pType; }

    37:

    38: // операторы

    39: Array& operator=(const Array&);

    40: T& operator[](int offSet) { return pType[offSet]; }

    41: const T& operator[](int offSet) const

    42: { return pType[offSet]; }

    43: // методы доступа

    44: int GetSize() const { return itsSize; }

    45:

    46: private:

    47: T *рТуре;

    48: int itsSize;

    49: };

    50:

    51: // выполнения...

    52:

    53: // выполняем конструктор

    54: template < class T>

    55: Array< T>:: Array(int size):

    56: itsSize(size)

    57: {

    58: pType = new T[size];

    59: for (int i = 0; i< size; i++)

    60: pType[i] = 0;

    61: }

    62:

    63: // конструктор-копировщик

    64: template < class T>

    65: Array< T>:: Array(const Array & rhs)

    66: {

    67: itsSize = rhs.GetSize();

    68: pType = new T[itsSize];

    69: for (int i = 0; i< itsSize; i++)

    70: pType[i] = rhs[i];

    71: }

    72:

    73: // оператор присваивания

    74: template < class T>

    75: Array< T> & Array< T>:: operator=(const Array & rhs)

    76: {

    77: if (this == & rhs)

    78: return *this;

    79: delete [] pType;

    80: itsSize = rhs.GetSize();

    81: pType = new T[itsSize];

    82: for (int i = 0; i< itsSize: i++)

    83: pType[i] = rhs[i];

    84: return *this;

    85: }

    86:

    87: // исполняемая программа

    88: int main()

    89: {

    90: Array< int> theArray; // массив целых

    91: Array< Animal> theZoo; // массив животных

    92: Animal *pAnimal;

    93:

    94: // заполняем массивы

    95: for (int i = 0; i < theArray.GetSize(); i++)

    96: {

    97: theArray[i] = i*2;

    98: pAnimal = new Animal(i*3);

    99: theZoo[i] = *pAnimal;

    100: delete pAnimal;

    101: }

    102: // выводим на печать содержимое массивов

    103: for (int j = 0; j < theArray.GetSize(); j++)

    104: {

    105: cout < < " theArray[" < < j < < " ]: \t";

    106: cout < < theArray[j] < < " \t\t";

    107: cout < < " theZoo[" < < j < < " ]: \t";

    108: theZoo[j].Display();

    109: cout < < endl;

    110: }

    111:

    112: return 0;

    113: }

     

    Результат:

    theArray[0] 0 theZoo[0] 0

    theArray[1] 2 theZoo[1] 3

    theArray[2] 4 theZoo[2] - 6

    theArray[3] 6 theZoo[3] 9

    theArray[4] 8 theZoo[4] 12

    theArray[5] 10 theZoo[5] 15

    theArray[6] 12 theZoo[6] 18

    theArray[7] 14 theZoo[7] 21

    theArray[8] 16 theZoo[8] 24

    theArray[9] 18 theZoo[9] 27

     

    Анализ: В строках 8-26 выполняется создание класса Animal, благодаря которому объекты определяемого пользователем типа можно будет добавлять в массив.

    Содержимое строки 29 означает, что в следующих за ней строках объявляется шаблон, параметром для которого является тип, обозначенный идентификатором Т. Класс Array содержит два конструктора, причем первый конструктор принимает размер и по умолчанию устанавливает его равным значению целочисленной константы DefaultSize.

    Затем объявляются операторы присваивания и индексирования, причем объявляются константная и не константная версии оператора индексирования. В качестве единственного метода доступа служит функция GetSize(), которая возвращает размер массива.

    Можно, конечно, представить себе и более полный интерфейс. Ведь для любой серьезной программы создания массива представленный здесь вариант будет недостаточным. Как минимум, пришлось бы добавить операторы, предназначенные для удаления элементов, для распаковки и упаковки массива и т.д. Все это предусмотрено классами контейнеров библиотеки STL, но к этому мы вернемся в конце занятия.

    Раздел закрытых данных содержит переменные-члены размера массива и указатель на массив объектов, реально помещенных в память.

     

     






    © 2023 :: MyLektsii.ru :: Мои Лекции
    Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
    Копирование текстов разрешено только с указанием индексируемой ссылки на источник.