- •1. Объектно-ориентированное программирование как методология проектирования программных средств.
- •1.2. Объект
- •Iarray a(10), b(25), c(45);
- •Int main(void)
- •2.1. Перегрузка имен функций
- •Int print(int);
- •Void print(int);
- •Int (*matrix)[10];
- •Void main(void)
- •Void incr(int &aa)
- •3.2 Объявление класса.
- •Имя_класса имя объекта;
- •Имя объекта. Имя элемента
- •Имя_объекта. Имя_метода( );
- •Имя класса *this;
- •Имя_класса (список формальных параметров)
- •Листинг 3.4
- •V_3d( double &X, double &y,double &z)
- •Void main(void)
- •Х:: х(const х&)
- •V_3d::v_3d(const v_3d& v1)
- •Void v_3d::print()
- •Сlass X
- •Void main (void)
- •4. Перегрузка операций
- •V_3d(double x1,double y1,double z1)
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.1. Использование дружественных функций при перегрузке операций
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.2.Особенности использования дружественных функций
- •Имя объекта. Имя_функции
- •Void f1( X& );
- •Void f2 ( X* );
- •Void main(void)
- •5. Производные классы
- •Int Bfunc( );
- •Int Xfunc( );
- •Int Efunc( X & x1 );
- •Istream
- •Iostream
- •Ifstream
- •С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.
- •Int width( int w);
- •Int precision( int p);
- •Void main(void)
- •Void open(char* filename, int mode, int access);
- •If(!fout) {
- •7. Виртуальные функции
- •Circle a;
- •A.Build();
- •Virtual double a(double X)
- •Void main (void)
- •Void Graphics Object :: Build() { };
- •8.Шаблоны функций и классов
- •Void main(void)
- •Void Swap ( SwapType &X, SwapType &y)
- •Void main(void)
- •Int a, double b;
- •Int sloc,rloc;//начало и конец очереди
- •Void qput(t I); // помещение элемента в очередь
- •Int main(void)
- •1.Какой принцип ооп реализуется с помощью шаблонных функций и классов?
- •2.Когда целесообразно использовать шаблоны функций? Каков общий вид объявления шаблона функции?
ostreamIstream
Iostream
fstream
ofstreamIfstream
Рис. 6.1. Упрощенная схема иерархии потоковых классов.
Названия классов, показанных на рис. 6.1:
ios -базовый потоковый класс;
istream - класс входных потоков;
iostream - класс двунаправленных потоков ввода-вывода;
ifstream - класс входных файловых потоков;
fstream - класс двунаправленных файловых потоков;
оfstream - класс выходных файловых потоков.
6.2. Форматирование ввода-вывода с помощью функций-членов класса ios
Имеется 2 способа форматирования ввода-вывода:
с помощью функций-методов класса ios;
С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.
В заголовочном файле iostream.h определен ряд флагов форматирования, позволяющих программисту устанавливать форматы представления выводимой информации.
Для установки флагов форматирования используется функция setf(), формат которой имеет вид:
long setf(long flags);
Эта функция возвращает предыдущее значение флага, устанавливая его новое значение равным значению, заданному параметром flags. При этом все остальные флаги остаются неизменными. Например, для задания выравнивания поля вывода по правому краю следует установить флаг правого выравнивания right:
сout.setf(ios::right);
Замечание.
Поскольку флаги формата задаются внутри класса ios, доступ к ним должен осуществляться через класс ios и операцию расширения области видимости ::.
С помощью операции побитового ИЛИ можно установить одновременно столько флагов, сколько нужно. Например, можно установить флаг выравнивания поля вывода по левому краю left и флаг вставки пробелов между знаком и цифрами числами internal в одном вызове функции setf:
сout.setf(ios::left | ios:: internal);
В листинге 6.1 приведен пример программы, в которой используются некоторые флаги формата.
Листинг 6.1. Флаги формата.
#include <iostream.h>
main()
{// вывод с использованием установок по умолчанию
cout << 123.23 << " привет " << 100 << '\n';
cout << 10 << ' ' << -10 << '\n';
cout << 100.0 << '\n';
// теперь меняем формат
// флаг hex для вывода в шестнадцатеричной системе
// флаг scientific для вывода в чисел с плавающей точкой
// в научной нотации (в экспоненциальном виде)
cout.setf(ios::hex | ios::scientific);
cout << 123.23 << " привет " << 100 << '\n';
// установка флага showpos приводит к появлению
// знака + перед положительными десятичными величинами
cout.setf(ios::showpos);
cout << 10 << ' ' << -10 << '\n';
//флаг showpoint приводит к выводу десятичной точки и нулей
//справа для всех чисел с плавающей запятой вне зависимости
// от того, нужно это или нет
// флаг fixed задает вывод чисел с плавающей запятой
// в обычном виде, с шестью цифрами после запятой
cout.setf(ios::showpoint | ios::fixed);
cout << 100.0;
return 0;
}
Эта программа выводит следующее:
123.23 привет 100
10 -10
100
1.2323e+02 привет 64
a fffffff6
+100.000000
Кроме флагов формата, существуют три функции-члена, определяемые в классе ios, которые определяют параметры формата: ширину поля, точность и символ заполнения. Этими функциями являются:
width(), precision() и fill().
По умолчанию, ширина поля равна числу выводимых символов. Функция width(), прототип которой имеет вид:
