Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Informatika (1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
107.52 Кб
Скачать

8)Объект и его атрибуты. Специализация и реализация типа данных.

Объект данных: контейнер для хранения значений данных. Он характеризуется набором атрибутов. Атрибуты определяют количество значений и логическую структуру. Одни объекты данных создаются и существуют с самого начала выполнения программы. Другие создаются в процессе выполнения. У каждого объекта есть время жизни.

Элементарный ОД: хранящиеся в нём значения используются как единое целое. Если объект представляет собой или содержит другие объекты, то он называется структурой.

Постоянные атрибуты: тип, местоположение, имя. Значения могут изменяться.

Переменная: объект, имеющий тип, имя и значение, который может изменяться при выполнении.

Константа: объект, чьё значение в программе не изменяется.

Тип данных определяется спецификацией, включающей в себя атрибуты значения и операции.

К реализации типа данных относится способ представления в компьютере и способ представления операции через алгоритмы и процедуры. Спецификация и реализация типа не зависит от синтаксического представления. Атрибуты объектов представляются с помощью описания или определения типов. Значением может быть множество констант.

9)Сигнатура операции, факторы, затрудняющие реализацию операций.

Сигнатура - это имя функции плюс спецификация формальных параметров.

Сигнатура функции(операции) — часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других. В различных языках программирования существуют разные представления о сигнатуре функции, что также тесно связано с возможностями перегрузки функций в этих языках. Например, в языке программирования C++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её аргументов, что составляет сигнатуру функции в этом языке. Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса.

Факторы, затрудняющие реализацию операций:

1. невозможность определить результат для некоторых аргументов 2. неявные аргументы 3. побочные эффекты  4. самоизменение

10)Подтипы, объявление типов и операций, перегруженные операции.

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

Объявление используется, чтобы уведомить компилятор о существовании элемента

Обьявление типов данных для переменных. int, double, char и так далее.

Перегрузка операций - это средство языка, позволяющее вводить операции над типами, определяемыми пользователем.

Перегруженные операции - когда символ операции обозначает не одну, а общую операцию, например сложение (+). Перегружать операции нужно с добавлением оператора  operator.

Перегружаемость - возможность использования в различных случаях для одной и той же операции операндов различных типов. Так, например, операция сложения позволяет "смешивать" типы int, double, float и другие в одном выражении. Такой полиморфизм обеспечен внутренними механизмами языка С++.

Для удобства чтения и написания кода разрешается перегрузка некоторых операций. Оператор перегрузки записывается с помощью ключевого слова operator. Разрешена перегрузка следующих операций:

бинарные +,-,/,*,%,<<,>>,==,!=,<,>,<=,>=,=,+=,-=,/=,*=,%=,&=,|=,^=,<<=,>>=,&&,||,&,|,^;

унарные +,-,++,--,!,~;

оператор присваивания =;

оператор индексации [].

Перегрузка операций позволяет использовать операционную нотацию (запись в виде простых выражений) к сложным объектам - структурам и классам. Запись выражений с использованием перегруженных операций упрощает восприятие исходного кода, так как более сложная реализация сокрыта.

31) По способу доступа файлы можно разделить на последовательные, чтение и запись в которых производится сначала файла байт за байтом, и файлы с произвольным доступом, допускающие чтение и запись в указанную позицию.Форматизированный и не форматизированный в/в ???

32)

Стандартные операции работы с файлами хранятся в библиотеке stdio.h. Функция открытия файла называется fopen(). Команда открытия (создания пустого) файла запишется так:  FILE *f1,*f2;

f1 = fopen("f1.txt","r"); //”r” значит будем читать из файла

f2 = fopen("f2.txt","w"); //”w” значит будем записывать в файл

Закрывается файл с помощью функции fclose():fclose(fo);

 33)Работа с текстовыми файлами

Для работы надо подключить заголовочный файл

#include <fstream>

Существуют входные, выходные и двунаправленые потоки

Пример открытия :

1)входного потока ifstream in(“infile.txt”);

2)выходного потока ofstream out(“infile.txt”);

3)поток ввода-вывода fstream both(“infile.txt”);

Считывание данных из файла in>>x;

Запись данных в вайл out<<x;

После работы с файлами их надо обязательно закрыть in.close(); out.close();

Пример программы

#include <fstream>

using namespace std;

int main (){

ofstream out(“outfile.txt”);

for (double i=0;i<10;i+=0.5)

out<<i<<’ ‘; //запись данных в текстовый файл

out.close();

}

34)Работа с двоичными(бинарными) файлами

Для работы надо подключить заголовочный файл

#include <fstream>

Для открытия двоичных файлов необходимо открыть входной поток, используя спецификатор режима ios::binary.

Пример

ifstream in(“infile.dat”,ios::binary);

Функция get считывает 1 символ (1 байт) в переменную ch типа char и возвращает ссылку на этот поток

in.get(ch);

Функция put записывает символ ch в поток и возвращает ссылку на этот поток.

in.put(ch);

Считываются абсолютно все символы учитывая пробел, \n и тд.

Пример вывода содержимого файла на экран

#include <iostream>

#include <fstream>

using namespace std;

int main ()

{

char next;

ifstream in(“infile.dat”,ios::binary);

in.get(next);

//функция eof возвращает true если файл считан до конца

while (! in.eof())

{

cout<<next;

in.get(next);

}

in.close();}

В двоичных файлах могут храниться последовательности целых и вещественных типов, где каждое значение занимает от 2 до 10 байт, размеры которых за ранее не известны в этом случае использовать функции get и put невозможно. Для считывании и записи блоков используется функции read() и write()

пример read() double i; in.read((char*)&i, sizeof(double));

(char*)&i – в какую переменную будут записаны данные из потока.

sizeof(double) – сколько байт считываем

пример write() int i; out.write((char)&i,sizeof(int));

Записывает в i указанное число байт(sizeof(int))

Пример программы

#include <fstream>

using namespace std;

int main ()

{

char next;

ofstream out(“outfile.dat”,ios::binary);

for (double i=0;i<10;i+=0.5)

out.write((char*)&i,sizeof(double)); //запись данных в двоичный файл

out.close();

}

35) Для обеспечения прямого доступа используется внутренний указатель файла, который определяет текущий индекс обрабатываемого байта файла(байты файла нумеруются как элементы массива с нуля) и используются две пары фунцкций:

seekg(n) – устанавливает указатель на позицию с номером n внутри файла для чтения.

Пример

in.seekg(3);

seekp(n) – устанавливает указатель на позицию с номером n внутри файла для записи.

Пример

out.seekp(3);

Константы позиционирования:

in.seekg(3,ios::beg);//устанавливает указатель на позицию с номером 3 относительно начала файла

in.seekg(3,ios::end);//устанавливает указатель на позицию с номером 3 относительно конца файла

in.seekg(3,ios::cur);//перемещает указатель на 3 индекса относительно текущей позиции

//streampos – специальный тип данных который используется для хранения индекса в файле.

streampos n=in.tellg(); - возвращает текущую позицию указателя потока ввода

streampos n=in.tellp(); - возвращает текущую позицию маркера потока вывода

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]