Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КПиЯП.docx
Скачиваний:
7
Добавлен:
25.09.2019
Размер:
75.59 Кб
Скачать

Форматирование ввод/вывод

Для организации ввода/вывода существуют средства:

  1. Применение класса айос для управления флагами форматирования

  2. Применение функций

Флаги форматирования- двоичные коды, управляющие форматами вводимых значений

Skipws = oxcooo1

Left = oxooo2- выравнивание по левому краю

Right = oxooo4

Integrnal = oxooo8- заполнение пустых позиций

Dec = ox0010- десятеричный

Oct= oxoo20-восмиричный

Hex = oxoo40- шестнадцатеричный

Showbase = oxoo80- выдача позиции точки

Showpaint = oxo100-

Uppercase = oxo200

Showpas = oxo400выдача знака у положительного числа

Scientifie = oxo800- выдача с плав точкой

Fixed = ox1000- выдача с фиксированной точкой

Unibuf =ox2000- улучшенная выдача

Stdio = ox4000- освобождение потока

Использование манипулятора

Специальные функции, управляющие процессами потокового вывода.

Доступ к программе со стандартными манипуляторами iomanio.h

Список стандартных манипуляторов:

  1. Ends- вывод null

  2. Flash- освобождает поток

  3. Heх- вывод числа в 16 ричном виде

  4. Resetios flags (long f) – отключает флаги f

  5. Setbase (int base)- устанавливает системы счисления

  6. Setfill (char ch)- устанавливает символ заполнения

  7. Set iosflags (long f)- включает флаги указанные f

  8. Setprecision (int p)- устанавливает в дробной части

  9. Setw( int w)- ширина поля выдачи

  10. Ws-режим пропуска пробелов

  11. Setfill()- заменяет пробелы на любой другой символ

Конструкторы и деструкторы

Чаще всего некоторая часть объекта перед его первым использованием должна быть инициализированной. Необходимость инициализации ещё чаще появляется в работе с объектами

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

Class stack

{ int stk[50];

Int tos;

Public:

Stack();

Void push (int i);

Int pop();

}

Stack::stack()

{ tos =;

Cout<<”стек проинициализирован”;

}

Конструктор автоматически вызывается в момент создания объекта. Следовательно объявление объекта является активным процессом ( выполняемым оператором). Конструктору можно передавать аргументы для этого необходимо их указать в объявлении и определении конструктора

Class myclass

{ int a;

Public:

Myclass(int x);

Void snow();

}

Myclass::myclass(int x)

{cout<<”в конструкторе”;

A=x;

}

Void myclass::show;

{ cout<<a<<”\n”;

}

Int main ()

{myclass obj(4);

Obj.show ();

Return 0;

}

Деструктор

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

Class stack

{…

Public:

Stack();

~stack();

Void push(int i);

Int pop();

}

Stack::~stack()

{cout<<”стек уничтожен”;

}

Задание 1:

Реализовать класс студент ФИО, курс, факультет, средний балл успеваемости. Организовать ввод/вывод инициализацию с помощью конструктора. Формирование списка студентов средний балл которых выше 7, или выдать сообщение об их отсутствии

Задача 2:

Квадратная матрица. Отсортировать элементы в порядке возрастания диагональных элементов

Базовая концепция ООП

Согласно стандартной терминологии С++ классы лежащие в основе иерархии называется базовым. Класс, наследующий свойства базового называется производным. Производные классы в свою очередь могут быть базовыми по отношению к другим. При наследовании члены базового класса становятся членами производного. Для реализации наследования обычно используется следующая конструкция:

Class имя произв:: уровень доступа

Имя базового

{

|| тело класса

};

Если уровнь доступа не указан, то по умолчанию для производного класса используется классификатор private

Если уровень доступа к членам базового класса указан как publick то все открытые и защищённые члены класса становятся открытыми и защищёнными членами производного класса при этом закрытые члены класса не меняют своего статуса и становятся не доступными производными

Class base

{ int I,j;

Publick:

Void seti (int a, int b)

{i=a;j=b;}

Void show ()

{cout<<i<<”\n”<<j<<”\n”;}

;

Class derived::publick base

{int k;

Publick:

Derived (int x) {k=x;}

Void showk()

{cout<<k<<”\n”;}

};

Int main

{derived ob (3);

Ob.seti (1,2);

Ob.show();

Ob.showk();

Return 0;

}

Если свойства базового класса наследуется с помощью классификатора private то все открытые и защищённые члены базового класса становятся закрытыми членами произвольно, т.е. они остаются доступными всем членам производного класса, но не доступна всем элементам программы вне класса.

Спецификатор protected повышает гибкость механизма наследование, если член класса объявлен защищённым, то вне класса он не доступен. С этой точки зрения он ни чем не отличается от private. Что качается наследования, здесь данный принцип действует по-другому. При открытом наследовании защищённые члены базового класса становятся членами производного класса и следовательно доступны остальным членам производного класса. Если производный класс является базовым по отношению к другому производному классу, то любой защищённый член базового класса, открыто наследуемый первой производной класса так же может наследоваться и вторым производным класса.

Class base

{protected

int I,j;

Publick:

Void seti (int a, int b)

{i=a;j=b;}

Void show ()

{cout<<i<<”\n”<<j<<”\n”;}

;

Class derived::public base

{int k;

Public:

Void setk () {k=i*j;}

Void showk()

{cout<<k<<”\n”;}

};

Int main

{derived ob (3);

Ob.seti (1,2);

Ob.show();

Ob.showk();

Return 0;

}