Программирование. Потоки ввода - вывода презентация

Содержание

Шаблоны. Родовые функции Шаблоны. Родовые классы. Потоки ввода-вывода. Файловые потоки ввода-вывода. Шаблоны. Потоки ввода-вывода

Слайд 1Программирование
Лекция 13


Слайд 2Шаблоны. Родовые функции
Шаблоны. Родовые классы.
Потоки ввода-вывода.
Файловые потоки ввода-вывода.
Шаблоны. Потоки ввода-вывода


Слайд 3Шаблоны
С помощью шаблонов можно создавать родовые функции и родовые классы.

В шаблонах

тип обрабатываемых данных задается как параметр (заранее не известен). Это позволяет использовать одну и ту же функцию или класс с разными типами данных.

Слайд 4Шаблоны. Родовые функции
Родовые функции определяют базовый набор операций, которые будут применяться

к разным типам данных.
При вызове родовая функция будет работать с тем типом данных, который она получит как параметр.
Родовая функция позволяет определить сущность некоторого алгоритма обработки данных без привязки к конкретному типу данных.

Слайд 5Шаблоны. Родовые функции
Родовая функция создается с помощью ключевого слова template и

называется шаблоном функции.
Формат определения шаблона:
template
тип_возвр_знач имя_функции (список_парам)
{ тело_функции }
T – это фиктивное имя типа данных (родовый тип данных), который компилятор автоматически заменяет именем реального типа данных при создании конкретного варианта функции.

Слайд 6template void Swap(T& a, T& b) {
T t;

t = a; a = b; b = t;
}

Слайд 7template void Swap(T& a, T& b) {
T t;

t = a; a = b; b = t;
}

int main() {
int i = 10, j = 20;
float x = 10.1, y = 20.2;

cout << "Before swap:" << endl;
cout << "i = " << i << ", j = " << j << endl;
cout << "x = " << x << ", y = " << y << endl;
cout << endl;

Swap(i, j);
Swap(x, y);

cout << "After swap:" << endl;
cout << "i = " << i << ", j = " << j << endl;
cout << "x = " << x << ", y = " << y << endl;
return 0;
}


Слайд 8template void Swap(T& a, T& b) {
T t;

t = a; a = b; b = t;
}

Слайд 9Шаблоны. Родовые функции
Вместо ключевого слова class можно использовать typename.
Можно использовать несколько

родовых типов данных:
template
тип_возвр_знач имя_функции (список_парам)
{ тело_функции }
Родовые функции похожи на перегруженные функции. Но при перегрузке функций можно написать разные алгоритмы, а родовая функция определяет общий алгоритм.

Слайд 10Шаблоны. Родовые функции
template
void print(T1 x, T2 y)

{
cout << x << ' ' << y << endl;
}

int main() {
print(10, "hi");
print(0.2, 0x10000);
print('a', 1.5);
print(12, 5);
return 0;
}


Слайд 11Шаблоны. Родовые классы
Родовые классы содержат общую логику хранения и обработки данных,

которую можно применять к объектам разного типа.
Формат объявления шаблона класса:
template
class имя_класса {
тело_класса
};
T – имя фиктивного типа данных. Конкретный тип будет определен при создании объекта класса.

Слайд 12Шаблоны. Родовые классы
Определение функций класса вне шаблона:
template
тип_возвр_знач имя_класса

:: имя_функции (список_парам) {тело_функции }
Функции-элементы родового класса автоматически становятся родовыми функциями.
Создание объекта класса на основе шаблона:
имя_класса <тип_данных> имя_объекта;


Слайд 13template
class List {
T data;
List* next;

public:
List(T d);

void add(List* node) {
node -> next = this;
next = 0;
}

List* getNext() { return next; }
T getData() { return data; }
};

template
List::List(T d) {
data = d;
next = 0;
}

Слайд 14int main() {
List start('a');
List *p, *last;

last = &start;

for(int i = 1; i < 26; i++) {
p = new List ('a'+i);
p -> add(last);
last = p;
}

p = &start;
while(p) {
cout << p -> getData();
p = p -> getNext();
}
cout << endl;

return 0;
}

Слайд 16class Point {
float x, y;
public:
Point(float x = 0.0, float

y = 0.0) {
this -> x = x;
this -> y = y;
}

friend ostream& operator<< (ostream& out, Point& p);
};



ostream& operator<< (ostream& out, Point& p) {
out << '[' << p.x << ',' << p.y << ']' << endl;
return out;
}

Слайд 17int main() {
List start(Point(0, 0));
List *p, *last;

last =

&start;
for(int i = 1; i < 26; i++) {
p = new List (Point(i/2.0, i));
p -> add(last);
last = p;
}

p = &start;
while(p) {
cout << p -> getData();
p = p -> getNext();
}
cout << endl;

return 0;
}

Слайд 19Потоки ввода-вывода
В C++ имеется набор классов для управления вводом-выводом, использующий механизм

перегрузки операций.

Классы потоков:
ios – базовый класс ввода-вывода;
istream и ostream – потоки ввода и вывода соответственно, производные от ios;
iostream – комбинированный класс для ввода и вывода, производный от istream и ostream;
ifstream, ofstream, fstream – классы для управления файловым вводом-выводом.


Слайд 20Потоки ввода-вывода
Предопределенные объекты-потоки:


Слайд 21class Point {
float x, y;
public:
Point(float x = 0.0, float

y = 0.0) {
this -> x = x;
this -> y = y;
}

friend ostream& operator << (ostream& out, Point& p);
friend istream& operator >> (istream& in, Point& p);
};

ostream& operator << (ostream& out, Point& p) {
out << '[' << p.x << ',' << p.y << ']' << endl;
return out;
}

istream& operator >> (istream& in, Point& p) {
in >> p.x >> p.y;
return in;
}

Слайд 22int main() {
Point p;
cout > p;
cout

<< "The point: " << p;
return 0;
}

Слайд 23istream& operator >> (istream& in, Point& p) {
char c;

in

>> c;
if(c != '[') return in;

in >> p.x;

in >> c;
if(c != ',') return in;

in >> p.y;

in >> c;
return in;
}

Слайд 24Файловые потоки ввода-вывода
ifstream, ofstream, fstream – классы для управления файловым вводом-выводом.
Чтобы

работать с файловым потоком, нужен объект потока и открытый файл, связанный с ним.
Для закрытия файла нужно вызвать метод close() для объекта потока.
Деструктор потока автоматически закрывает файл при уничтожении объекта потока.

Слайд 25Конструирование объекта потока
Конструктор, создающий объект без открытия файла:
ifstream(); ofstream(); fstream();
Конструктор, открывающий указанный файл

и связывающий его с потоком:
ifstream(const char* name,
int mode = ios::in,
long prot = 0666);
Конструктор, создающий объект и связывающий его с открытым файлом:
ifstream(int file);
Конструктор, создающий объект и связывающий его с открытым файлом и буфером:
ifstream(int file, char* buf, int len);

Слайд 26Конструирование объекта потока
Режимы открытия файла (параметр mode):
ifstream(const char* name, int mode,

long prot);
Значения параметра определены в классе ios:

Параметры можно комбинировать с помощью поразрядного «ИЛИ»


Слайд 27#include
#include
using namespace std;

class Point {
float x, y;

public:
Point(float

x = 0.0, float y = 0.0);

friend ostream& operator << (ostream& out, Point& p);
friend istream& operator >> (istream& in, Point& p);

friend ofstream& operator << (ofstream& out, Point& p);
friend ifstream& operator >> (ifstream& in, Point& p);
};

Слайд 28ofstream& operator

<< p.x << ',' << p.y << ']' << endl;
return out;
}

ifstream& operator >> (ifstream& in, Point& p) {
char c;

in >> c;
if(c != '[') return in;

in >> p.x;

in >> c;
if(c != ',') return in;

in >> p.y;

in >> c;
return in;
}

Слайд 29int main() {
Point p;
cout

cin >> p;

char fileName[] = "points.txt";
fstream fs(fileName, ios::app|ios::binary);

fs << p;
fs.close();

fs.open(fileName, ios::in|ios::binary);

while(fs) {
fs >> p;
if(fs) cout << "The point: " << p;
}

fs.close();
return 0;
}

Обратная связь

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

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика