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

39)Форматированный и неформантированнй ввод и вывод

40)Работа с указателем текущей позиции в файле.

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

long ftell (FILE *f);

ftell – возвращает текущее значение указателя позиции в файл, отсчитанное в байтах от его начала.

int fseek – возвращает 0, если удалось переместить указатель и не0, если ошибка.

int fseek (FILE *f, long offset

int origin);

offset – смещение в байтах

int origin – с какой позиции задавать смещение

Константы: SEEK_SET указатель, что смещение с начала

SEEK_CUR текущее положение

SEEK_END с конца

fseek (f, i * size of (struct Record), SEEK_SET);

 Функция прямого доступа к информации fseek() в языке Си.      При прямом доступе можно выполнять операции ввода/вывода, используя систему ввода/вывода языка Си и функцию fseek(), которая устанавливает указатель текущей позиции в файле. Прототип этой функции имеет следующий вид:     int fseek(FILE *указатель файла, long int колич_байт, int начало_отсчета); 

  1. Главные признаки объектно-ориентированного подхода (Alan Kay).

  1. В прогр. всё явл. объектом.

  2. Вычисления имеют вид взаимодействия объектов.

  3. Каждый объект имеет собств. область памяти.

  4. Каждый объект является представителем класса.

  5. Поведение объекта определяется классом.

  6. Классы образуют единую древовидную структуру с общим корнем, называемой иерархией наследования.

2)Общеязыковые расширения C++: значения аргументов функции по умолчанию, комментарии, ссылки, встраиваемые (под­ставляемые) функции, операция разрешения области видимости.

в C++ при вызове функций можно опускать параметры. В таких случаях для опущенных параметров будут использоваться значения по умолчанию.

- значения аргументов функции по умолчанию

void f(int a, double b=1.5);

int main(){ f(1,5.5);

f(-10); // = f(-10, 1.5);

Все аргументы расположенные справа от «по умолчанию» должны быть по умолчанию

- комментарии // строка , /* много строк */

- ccылки это скрытый указатель хранит адрес. Всякий раз когда в программе встречается имя ссылки компилятор принимает операцию разодресации, по этому ему возвращается переменная по этому адресу. В с++ ссылки ведут себя как константные скрытые указатели.адрес для ссылки задается только 1 раз в момент ее определения и дальше адрес не изменяется ,пример: int x=5 int &rx=x. Оба равны 5

- встраиваемые функции: inline f(); - попытка оптимизировать работу программы…. inline-функция - это функция с модификатором ilnline, код которой компилятор может встроить в место вызова функции. 

- операция разрешения области видимости. int x=1; int main(){int x=2; printf(“%d”,x);}//::x

3)Перегрузка функций. Меха­низм реализации перегрузки функций. Спецификация внешней связи.

В С++ можно одновременно задавать несколько функций с одним и тем же именем, если различаются списки их аргументов.

void f();

void f(int,double); Нельзя иметь фунции, отличающ. только типом возвр. знач.

void f(double,int);

Меха­низм реализации перегрузки функций: Компилятор искажает заданные нами имена, добавляя информацию о типах аргументов функции. Искажение не стандартизировано.

Спецификация внешней связи. Компилятор Си не искажает имя функции, а компилятор С++ искажает и ожидает другое имя. Конструкция, запрещающая С++ искажать имена exturn “C”{void f();} или #include “f.h”.

4) Специальные методы класса. Конструкторы. Деструктор. Конструктор копирования. Операция присваивания. Конст­рукторы преобразования и методы приведения типа. Операции new и delete для класса.

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

методы обеспеч. общее функцианирование любых классов.

Конструкторы – вызываются при создании нового обьекта. Задача – инициализация обьекта, т.е. дать нач. знач. для всех его полей. -Имя констр. совпадает с именем класса.

-Не задается тип возвр. значения. -М.б. перегружен. -Не наследуются –Не м.б. виртуальной функцией. class A{ public: int a; A(){a=0;}; A(int x){a=x;}}

E сли нет конструкт.-’’конструктор по умолчанию''

int main(){ A x, y(10);}

Деструкторы - вызывается перед уничтожением любого обьекта. При выходе обьекта из области видимости вызывается деструктор. ~ <имя класса>(){}; Для класса м.б. вызван только 1 деструктор. Если деструктор явно не созд. - его создает компилятор.

Конструктор копирования – вызывается если созданный обьект должен быть копией уже существующ. обьекта того же класса. –Конструктор с одним аргументом, ссылкой на обьект своего класса. class A{ int a; A(){a=0;}; A(A& x){a=x.a;};

Операция присваивания A operator = (A a2){ a1=a2; // = a1.operator=(a2);}

Конст­рукторы преобразования. – используется для того чтобы объект чужого класса превратить в объект нашего класса. К.п. – это констр. с 1им аргументом. Тип аргумента-чужой тип, который. преобраз. в объект нашего класса. Class A{ int a; A(int x=0)!!!{a=х};}

void f(A x); int main(){ f(5); A x(10); - разрешено т.к. есть преобразование. !!!

Приведе́ние ти́па — преобразование значения переменной одного типа в значение другого типа. int X; int Y = 200; char C = 30;

X = (int)C * 10 + Y; //переменная С приведена к типу int.

Операции new и delete для класса - Если для класса явно не заданы, то можно исп. стандартные версии: new:-выделяет память в куче,-вызывает конструктор

delete:-освобождает память,-вызов деструктора

void *operator new(int size){return malloc(size);}

void operator delete(void *p){free(p);}

Конструкторы преобразования и операции присваивания типа. Поля и методы класса в целом.

Общая структура программы на C++

Общая структура программы на java

    1. Константные объекты клас­са. Константные методы. Ключевое слово mutable. Пример реализации двусвязного списка с помощью классов.

Для константных объектов запрещен вызов не константных методов класса. Константный метод в общем случае не может изменять значение полей класса. Константные методы можно вызывать для неконстантных объектов класса. class A{int a;

int getA() const{return a;}}

mutable int a; -отмечает те поля, знач которых int main() { const A x;

можно изменять в константных методах. int x=getA();}

Пример реализации двусвязного списка с помощью классов.

list.h

сlass List{struct Node{ int key;

char *data;

Node *prev,*next;}

public: List();

~List();

List(List&);//констр. копиров.

List & operator=(List&);

void add(int key,char *data);

void delNode(int key);

void*find(int key);

void show();

void delllist();

private: Note*findNode(int key);

В открытой части List, нигде не используется

класс Node

list.cpp

#include “list.h”

#include “iostream”

using namespace std;

List::List(){first=0;}

List::~List(){delist();}

int List::Node::findNode(int key){Node*tmp=first;

while(tmp){if(tmp->key==key) return key;

tmp=tmp->next}

return 0;}

void List::show(){Node *tmp=first;

while(tmp){cout<<tmp->key<<” . “ <<tmp->data<<endl;}

tmp=tmp->netx;}

    1. Статические поля и методы класса.

class A

{public: static int i;}

/* Обязательно нужно проинициализировать */

int A::i = 0;

int main(){

A::i = 1;}

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

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