- •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.Когда целесообразно использовать шаблоны функций? Каков общий вид объявления шаблона функции?
If(!fout) {
cout << "Выходной файл открыть невозможно\n";
return 1;
}
char ch;
unsigned count = 0;
// сброс флага skipws
fin.unsetf(ios::skipws); // не пропускать пробелы
// выполнять, пока не будет достигнут конец файла
while(!fin.eof()) {
fin >> ch;
fout << ch;
count++;
}
cout << "Число скопированных байтов: " << count << '\n';
return 0;
}
Примечание. Когда установлен флаг skipws, при выполнении ввода в поток, начальные невидимые символы (пробелы, табуляции и символы новой строки) отбрасываются. Когда флаг skipws сброшен, невидимые символы не отбрасываются. Результат, выводимый этой программой, может отличаться от того, который выводится операционной системой, поскольку некоторые символы могут интерпретироваться иначе. Когда считывается последовательность возврат каретки/перевод строки, она преобразуется в символ новой строки. При выводе новая строка считается одним символом, но снова преобразуется в последовательность возврат каретки/перевод строки.
Контрольные вопросы
1.Какие классы поддерживают ввод – вывод в С++?
2.Назовите потоки, открываемые для исполняемой программы.
3.Какова схема иерархии классов ввода – вывода?
4. Назовите способы организации форматированного ввода – вывода.
5.Какой флаг следует использовать для выравнивания поля вывода по левому краю?
6. С помощью каких функций можно определить ширину поля вывода, точность и символ заполнения?
7. Какие классы поддерживают файловый ввод-вывод?
8. Какие типы файловых потоков существую и С++?
9 Как выполняется открытие файла? Перечислите режимы открытия файла.
7. Виртуальные функции
К механизму виртуальных функций (virtual function) обращаются в тех случаях, когда в базовый класс необходимо поместить функцию, которая должна по-разному выполняться в производных классах. Виртуальные функции важны потому, что они используются для поддержки динамического полиморфизма. В С++ такое свойство ООП, как полиморфизм, поддерживается двумя способами:
на этапе компиляции - посредством перегрузки операций и функций;
во время выполнения программы – посредством виртуальных функций.
Виртуальные функции позволяют производным классам определить разные версии функций базового класса.
Класс, содержащий одну или несколько производных функций, называется полиморфным классом.
7.1 Задача, приводящая к виртуальным функциям
Рассмотрим следующую задачу.
Пусть имеется базовый класс Graphics Object, описывающий произвольную фигуру на экране без конкретизации ее вида:
class Graphics Object {
// элементы – данные класса
……………
public:
// методы класса, необходимые для работы с любым графическим объектом
void Build(); // построить
void Display(); // показать на экране
// другие методы
…………..
};
Пусть производный класс, созданный для работы с конкретным объектом – окружностью имеет функции с такими же именами, такого же типа и с таким же списком параметров:
class Circle: public Graphics Object {
// элементы – данные класса
……………
public:
// методы класса, необходимые для работы с окружностью
void Build(); // построить окружность
void Display(); // показать на экране
// другие методы
…………..
};
Создадим объект производного класса с именем A;
