Студопедия

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

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

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






  • Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом
  • Листинг 18.4. Использование оператора вывода






    1: #include < iostream.h>

    2:

    3: const int DefaultSize = 10;

    4:

    5: class Animal

    6: {

    7: public:

    8: Animal(int);

    9: Animal();

    10: ~Animal() { }

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

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

    13: private:

    14: int itsWeight;

    15: };

    16:

    17: Animal:: Animal(int weight):

    18: itsWeight(weight)

    19: { }

    20:

    21: Animal:: Animal():

    22: itsWeight(0)

    23: { }

    24:

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

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

    27: {

    28: public:

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

    30: Array(int itsSize = DefaultSize);

    31: Array(const Array & rhs);

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

    33:

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

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

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

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

    38: { return pType[offSet]; }

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

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

    41:

    42: friend ostream& operator< < (ostream&, Array< T> &);

    43:

    44: private:

    45: T *pType;

    46: int itsSize;

    47: };

    48:

    49: template < class T>

    50: ostream& operator< < (ostream& output, Array< T> & theArray)

    51: {

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

    53: output < < " [" < < i < < " ] " < < theArray[i] < < endl; return output;

    54: }

    55:

    56: // Ряд выполнений...

    57:

    58: // выполнение конструктора

    59: template < class T>

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

    61: itsSize(size)

    62: {

    63: pType = new T[size];

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

    65: pType[i] = 0;

    66: }

    67:

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

    69: template < class T>

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

    71: {

    72: itsSize = rhs.GetSize();

    73: pType = new T[itsSize];

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

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

    76: }

    77:

    78: // перегрузка оператора присваивания (=)

    79: template < class T>

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

    81: {

    82: if (this == & rhs)

    83: return *this;

    84: delete [] pType;

    85: itsSize = rhs.GetSize();

    86: pType = new T[itsSize];

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

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

    89: return *this;

    90: }

    91:

    92: int main()

    93: {

    94: bool Stop = false; // признак для цикла

    95: int offset, value;

    96: Array< int> theArray;

    97:

    98: while (! Stop)

    99: {

    100: cout < < " Enter an offset (0-9) ";

    101: cout < < " and a value. (-1 to stop): ";

    102: cin > > offset > > value;

    103:

    104: if (offset < 0)

    105: break;

    106:

    107: if (offset > 9)

    108: {

    109: cout < < " ***Please use values between 0 and 9.***\n";

    110: continue;

    111: }

    112:

    113: theArray[offset] = value;

    114: }

    115:

    116: cout < < " \nHere's the entire array: \n";

    117: cout < < theArray < < endl;

    118: return 0;

    119: }

     

    Результат:

    Enter an offset (0 -9 and а value. (-1 to stop) 1 10

    Enter an offset (0 -9 and а value. (-1 to stop) 2 20

    Enter an offset (0 -9 and а value. (-1 to stop) 3 30

    Enter an offset (0 -9 and а value. (-1 to stop) 4 40

    Enter an offset (0 -9 and а value. (-1 to stop) 5 50

    Enter an offset (0 -9 and а value. (-1 to stop) 6 60

    Enter an offset (0 -9 and а value. (-1 to stop) 7 70

    Enter an offset (0 -9 and а value. (-1 to stop) 8 80

    Enter an offset (0 -9 and а value. (-1 to stop) 9 90

    Enter an offset (0 -9 and а value. (-1 to stop) 1С 10

    ***Please use values between 0 and 9.* > > *

    Enter an offset (0 -9) and а value. (-1 to stop) -1 -1

    Here's the entire array:

    [0] 0

    [1] 10

    [2] 20

    [3] 30

    [4] 40

    [5] 50

    [6] 60

    [7] 70

    [8] 80

    [9] 90

     

    Анализ: В строке 42 объявляется шаблон функции operator< < () в качестве друга шаблона класса Array. Поскольку operator< < () реализован в виде функции шаблона, то каждый экземпляр этого типа параметризованного массива будет автоматически иметь функцию operator< < () для вывода данных соответствующего типа. Выполнение этого оператора начинается в строке 49. Каждый член массива вызывается по очереди. Этот метод работает только в том случае, если функция operator< < () определена для каждого типа объекта, сохраняемого в массиве.

     

     






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