Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КПиЯП ответы.docx
Скачиваний:
5
Добавлен:
27.09.2019
Размер:
176.71 Кб
Скачать

Перечисляемый тип данных

Перечислимый тип (enumeration) - это множество поименованных це­лых констант. Перечислимый тип определяет все допустимые значения, которые могут иметь переменные этого типа.

enum имя_типа {список _названий} список переменных;

Во время объявления типа можно одному или нескольким символам присвоить другие значения, например:

enum value {one=l, two, three, ten=10, thousand=1000, next};

С переменными перечислимого типа можно производить следующие операции:

-присвоить переменную типа enum другой переменной того же типа; -провести сравнение с целью выяснения равенства или неравенства; -арифметические операции с константами типа enum (i = win - aut).

Переименование типов typedef

Язык С++ позволяет давать новое название уже существую­щим типам данных. Для этого используется ключевое слово typedef. При этом не создается новый тип данных. Пример: typedef char SYMBOL; typedef unsigned UNSIGN; typedef float REAL;

  1. Дайте определение функции в языке программирования С. Раскройте понятия: формальные и фактические параметры. Перечислите и поясните правила использования функций при написании программ. Объясните разницу в процессах передачи аргументов функции по значению и по ссылке.

Функции - это строительные блоки языка, самостоятельные единицы программы, спроектированные для решения конкретных задач. Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова.

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

С использованием функций в языке С++ связаны три понятия:

- определение функции (описание действий, выполняемых функцией);

- прототип функции (задание формы обращения к функции);

- вызов функции.

Основная форма описания функции имеет вид:

тип <имя функции > (список параметров)

{

// тело функции

}

Пример:

double func1 (int a, double b)

{ if (a<b) return b; }

  1. Дайте определение функции в языке программирования С. Поясните, что такое указатель на функцию и приведите пример его использования. Объясните принцип работы функции с переменным числом параметров. Поясните, что такое сигнатура и прототип функции.

    Функции - это строительные блоки языка, самостоятельные единицы программы, спроектированные для решения конкретных задач. Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова.

Функция не может возвращать массив или функцию, но может возвращать указатель на любой тип, в том числе и на массив и на функцию.

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

Прототип функции – это задание формы обращения к функции. В языке Си нет требования, чтобы определение функции обязательно предшествовало ее вызову. Определения используемых функций могут следовать за определением функции main(), перед ним, или находится в другом файле.

Сигнатура метода - это сокращенная форма записи параметров метода и типов возвращаемого значения. Следует подчеркнуть, что в сигнатуру не входят ни имя метода, ни имена параметров. 

Функции с изменяемым списком параметров

Для решения задачи передачи неопределённого количества параметров C++ располагает также средствами объявления переменных списков параметров.

Вспомним несколько форм Бэкуса-Наура, определяющих синтаксис списка параметров в определении и прототипе функции.

СписокОбъявленийПараметров ::= [СписокОбъявленийПарам] [...]

::= СписокОбъявленийПарам, ...

СписокОбъявленийПарам ::= ОбъявлениеПараметра

::= [СписокОбъявленийПарам,] ОбъявлениеПараметра

Пример:

int PP(…);

int PP(…)

{

return 100;

}

Таким образом, список объявлений параметров может завершаться многоточием, отделённым запятой от списка объявлений параметров, этого многоточия в списке параметров может не быть, а возможно также, что кроме многоточия в списке параметров вовсе ничего нет.

Так вот это многоточие предупреждает транслятор о том, что определяемая или объявляемая функция может вызываться с произвольным списком параметров.

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

  1. Дайте определение динамической структуры данных. Объясните принцип работы стека, очереди, списка, кольца, дерева. Опишите синтаксис объявления и обращения к элементам динамической структуры с помощью указателей. Перечислите основные функции для работы с динамическими структурами данных. Приведите примеры добавления и удаления элементов в динамическую структуру.

В языках программирования (Pascal, C, др.) существует и другой способ выделения памяти под данные, который называется динамическим. В этом случае память под величины отводится во время выполнения программы. Такие величины будем называть динамическими

Стек - структура данных, в которой доступ к элементам организован по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

Очередь — это линейный список информации, работа с которой происходит по принципу "первым пришел — первым вышел".

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

Кольцо – это список где последний элемент связан с последним.

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

Динамическое выделение и указатели.

У всех откампилированных программ при размещении в памяти можно выделить четыре области: код программы, глобальные данные, стек и куча.

Куча — это область свободной памяти, управляемая функциями динамического выделения malloc() и free().

Функция malloc() выделяет память и возвращает указатель на начало выделенного блока. Функция free() возвращает ранее выделенную память в кучу для повторного использования.

void *malloc(size_t число _байт); void free(void *р);

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

Файлом называется последовательность байт хранящемся на внешнем носители информации.

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

Присоединение файла FILE

Присоединение потока *FILE.

Для соединения файла с потоком используется функция:

FILE* fopen (const char* filename, const char* mode); в случае удачи указатель не поток, иначе пустое значение

Параметры mode для текстовых файлов:

“r”- чтение

“w”- записи

“a”,”ab”-присеединение

“r+”,”w+”,”a+”-чтение и запись

Пример : out=fopen(“1.txt”,”w”);

Для закрытия файла используется ф-ция:

Int fclose(FILE* stream), пример: fclose(out)

Для перенаправления потока используется ф-ция: FILE* fopen (const char* filename, const char* mode. FILE* stream); закрывается файл с именем filename и присоединяется к потоку stream в режиме mode.

Стандартные ф-ции для работы с файлами:

  1. Индикатор конца файла int feof(FILE * stream) если достигнут конец файла возвращает не нулевое значение. While(!feof(out))

  2. Индикатор позиции void rewind (FILE * stream) устанавливает индикатор позиции в начало файла.

  3. Сдвиг int fseek (FILE * stream, long offset, int mode), сдвигает индикатор позиции на offset байт. Параметр mode может принимает следующие значения:

SEEK_SET – сдвиг в начала; SEEK_CUR – от текущей позиции, SEEK_END-от конца.

  1. Удаление Int remove (const char* filename)

  2. Переименование Int rename(const char* filename, const char* newfilename)

Символьный в/в:

fputc , f getc.

F putc(‘A’,in); C=fgetc(in);

в/в строк:

fputs- запись в поток строчку fgets- чтение из потока строки

fgets(str);fputs(str,Text); fgets(stre, n, text) fputs(str)

fgets- считывает из строку из потока останавливается, когда прочитан n-1 символ, или когда встречается символ \n, или когда конец файла.

Форматированный в/в

fprint и fscanf

if (!(out=fopen(“1.txt”.”r”)))

{/*error!*/} For (i=0; i<n;++i) {fscanf(….); Fprintf(ut,”%d %s %f \n”,z.code, z.name,z.mark);} fopen(out);

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

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

Файлом называется последовательность байт хранящемся на внешнем носители информации.

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

Присоединение файла FILE

Присоединение потока *FILE.

Для соединения файла с потоком используется функция:

FILE* fopen (const char* filename, const char* mode); в случае удачи указатель не поток, иначе пустое значение

Параметры mode для текстовых файлов:

“r”- чтение

“w”- записи

“a”,”ab”-присеединение

“r+”,”w+”,”a+”-чтение и запись

Пример : out=fopen(“1.txt”,”w”);

Для закрытия файла используется ф-ция:

Int fclose(FILE* stream), пример: fclose(out)

Для перенаправления потока используется ф-ция: FILE* fopen (const char* filename, const char* mode. FILE* stream); закрывается файл с именем filename и присоединяется к потоку stream в режиме mode.

Стандартные ф-ции для работы с файлами:

  1. Индикатор конца файла int feof(FILE * stream) если достигнут конец файла возвращает не нулевое значение. While(!feof(out))

  2. Индикатор позиции void rewind (FILE * stream) устанавливает индикатор позиции в начало файла.

  3. Сдвиг int fseek (FILE * stream, long offset, int mode), сдвигает индикатор позиции на offset байт. Параметр mode может принимает следующие значения:

SEEK_SET – сдвиг в начала; SEEK_CUR – от текущей позиции, SEEK_END-от конца.

  1. Удаление Int remove (const char* filename)

  2. Переименование Int rename(const char* filename, const char* newfilename)

Символьный в/в:

fputc , f getc.

F putc(‘A’,in);

C=fgetc(in);

в/в строк:

fputs- запись в поток строчку

fgets- чтение из потока строки

fgets(str);fputs(str,Text);

fgets(stre, n, text)

fputs(str)

fgets- считывает из строку из потока останавливается, когда прочитан n-1 символ, или когда встречается символ \n, или когда конец файла.

Форматированный в/в

fprint и fscanf

if (!(out=fopen(“1.txt”.”r”)))

{/*error!*/}

For (i=0; i<n;++i)

{fscanf(….);

Fprintf(ut,”%d %s %f \n”,z.code, z.name,z.mark);}

fopen(out);

  1. Дайте определение понятию препроцессор. Поясните, какие стадии включает в себя препроцессорная обработка. Объясните назначение основных директив препроцессора: #include, #define. Приведите примеры их использования.

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

Стадии препроцессорной обработки:

Все системно-зависимые обозначения перекодируются в стандартные коды.

Каждая пара из символов '\' и "конец строки" вместе с пробелами между ними убираются, и тем самым следующая строка исходного текста присоединяется к строке, в которой находилась эта пара символов.

В тексте распознаются директивы и лексемы препроцессора, а каждый комментарий заменяется одним символом пустого промежутка.

Выполняются директивы препроцессора и производятся макроподстановки.

Эскейп-последовательности в символьных константах и символьных строках заменяются на их эквиваленты.

Смежные символьные строки конкатинируются, то есть соединяются в одну строку.

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

include

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

  1. #include <имя файла>

Поиск этого файла будет вестись в каталоге, где расположены библиотечные файлы.

  1. #include "имя файла"

Поиск будет осуществляться в каталоге, где расположена наша программа.

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

define

Директива препроцессора define используется, что бы создать константы. Вот ее синтаксис:

#define идентификатор    значение

  1. Дайте определение основным свойствам объектно-ориентированного программирования: абстрагирование, полиморфизм, наследование, инкапсуляция, модульность, сохраняемость. Раскройте понятия объект и класс. Приведите примеры. Опишите синтаксис объявления класса, инициализации экземпляров класса. Объясните назначение и принцип использования спецификаторов доступа к полям и методам класса.

Классом называется множество объектов имеющих общее св-ва и операций допустимых над этим объектами

Class | strukt | union имя

{компоненты};

Все компоненты класса введенных с помощью слов struct union явл общедоступными, а с помощью class личные.

Спецификаторы доступа:

- private для защиты данных, доступ только для своих классов и не для других;

- public общедоступный, доступен при любом обращении пр-мы к объекту;

- protected защищенный, только для наследников и для самого класса.

Все спецификаторы могут появляться много раз и в любом порядке.

Class sun

{int x,y,s; Public: Void summa(); Void getx(int x1){x=x1;}

Void gety (int y1){y=y1;} }; Void sum::summa() {s=x+y; Cout<<s;}

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

Имя_объекта имя_компонента

Int main() {Sum z; int a,b; Cin>>a>>b; z.getx(a); z.gety(b);

z.summa(); return 0; }

Абстрагирование — это выделение существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов.

Инкапсуляция — это процесс отделения друг от друга отдельных элементов объекта, определяющих его устройство и поведение.

Модульность — это свойство системы, связанное с возможностью ее декомпозиции на ряд внутренне связных, но слабо связанных между собой модулей.

Наследование – построение новых классов на основе существующих с возможностью добавления или переопределения данных и методов.

Полиморфизм – способность класса принадлежать более чем одному типу.

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

Конструктор создает объект

Имя_класса(список параметров){тело}

В конструкторе нельзя указать тип возвращаемого значения, даже void. Конструктор часто использует значения по умолчанию. При вызове конструктора учитываются следующие особенности:

  1. Если он не вызван явно, то он все равно будет вызван автоматически.

  2. Если он не описан явно , то он генерируется транслятором без учета пр-миста.

Деструктор разрушает объект.

~ имя_класса (){тело}

Деструктор может не содержать операторов , не может принимать ни каких параметров и не возращает значение. В отличие от конструктора деструктор не может быть перегружен.

Class sun

{int x,y,s;

Public: Sun(int x1,inty1); int summa(); Void getx(int x1){x=x1;}

Void gety (int y1){y=y1;} ~ Sun; }; Sun:: Sun (int x1, int y1)

{Sun::getx(x1); Sun:: gety(y1);} Int sum::summa() {return s=x+y;}

Sun ::~ Sun(){} Int main() { int a,b.c; Sum z=sum(a,b);

Cout<<z.Summa(); z.~Sun(); return 0; }

Отделение интерфейса от реализации.

Одним из более фундаментальных принципов разработки ПО состоит в отделения интерфейса класс от его реализации, это облегчает разработку и модификацию пр-мы. Для осуществления этого принципа следует помещать объявление класса и его реализацию в отдельные файлы(заголовочный.h и исходный.cpp)Заголовочный файл подключается с помощью директивы # include. Исходные файлы компилируется и компонуется вместе с главной пр-мойю При этом испол директивы #ifndef #define #endif,. Для того чтобы избежать подключения файлов более одного раза.

Указатель *this

Каждый компонент , поле или метод имеет доступ к указателю с именем this, который указывает на объект для, которого этот метод вызван, т.е это указатель объекта на самого себя.

Применяется:

  1. Для того чтобы не было неопределенности;

  2. Помогает определить с данным какого объекта идет работа;

  3. Для возрата указателя на сам объект (return * this);

  4. Для передачи объекта в ф-цию.

Статические компоненты класса – это такие глобальные объекты, которые принадлежат всему классу и существуют в единственном экземпляре, т.е не создаются для каждого отдельного объекта. Доступ к таким объектам, возможен с помощью оператора :: . К статическим данным имеют доступ только статические ф-ции. Статические ф-ции на имеют указателя *this.

  1. Раскройте понятия простое наследование и множественное наследование. Приведите примеры классов-родителей и классов-наследников. Поясните особенности видимости полей и методов классов-наследников в зависимости от степени их защиты в классах-родителях. Поясните поведение конструкторов и деструкторов в базовых и производных классах

Наследование – построение новых классов на основе существующих с возможностью добавления или переопределения данных и методов.

Механизм наследования позволяет определить классы на основе уже существующих. Класс радитель называется базовым, а класс потомок производным. Любой производный класс может быть базовым для другого потомка. Таким образом формируется иерархия классов и объектов.

Class имя_произв_класса: модификатор Имя_баз_класса

{компоненты};

Видимость полей и методов классов-наследников в зависемости от степени их защиты в классах-радителях

модификатор

Доступ в базовом классе

Доступ в производном классе

public

public

public

protected

protected

private

private

protected

public

protected

protected

protected

private

private

private

public

private

protected

private

private

private

Class base

{public: int print1(){return 10;} Protected: int print2(){return 20;}

Private: int print 3(){ return 30;} }; Class der: public base

{public: show1(){return 1;} Private: show2(){return ;} int print2() };

Int main () {base b; Cout << b.print1;//10 der d; cout <d.show 1 ;

cout<<print1; return0; }

Т.к производный класс наследуют элементы базового, то при создании объекта производного класса вызывается конструктор базового. Деструктор вызываются в отраженной последовательности сначала производного ,а затем базового.

Множественное наследование .

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

Class Имя-произ_класса : мод-р1 Имя_баз1б мод-р2 имя_баз2…..

{ компоненты }; Class base1 {protected: int value;

public: base1 (int x){value=x;} int lef(){return value;} };

Class base2 {protected: Char lefter; public:

base2 (char s){lefter=s;} char get(){return lefter;} };

Class der : public Base1, public base2 {private: Floet real;

Public: Der (int, char, float); Float get(){return real;}

Void print(){cout<<value”<<lifter<<”real}; };

  1. Дайте определение понятию полиморфизм, виртуальная функция. Опишите реализацию полиморфизма через виртуальные функции. Приведите примеры. Перечислите и объясните правила использования виртуальных функций.

Полиморфизмспособность класса принадлежать более чем одному типу.

Виртуальный метод (виртуальная функция) — в объектно-ориентированном программировании метод (функция) класса, который может быть переопределён в классах-наследниках так, что конкретная реализация метода для вызова будет определяться во время исполнения.

Ф-ция производного класса заменяет ф-цию базового, если ф-ция была объявлена как Virtual, то она остается такой на любом более низком уровне иерархии. Виртуальная ф-ция не может быть статической. Переопределение в потомке виртуальная ф-ция должна иметь такой же протажен., что и в базовом классе.

Class parent

{public: Int k; Parent (int a){k=a;}

Virtual void fu (){cout<< “fu of base, k=”<<k;}

Virtual void f (){cout<< “for base, k*k=”<<k*k;} };

Class child {public: child (int x):rarent(x){}

Virtual void fu (){cout<< “f of derived, k+1=”<<k+1;}

Virtual void f (){cout<< “f of derived, k-1=”<<k-1;} };

Int main() {parent *p; Parent ob1(10); Chila ob2 (15);

P=&ob1; p->fu(); p->f(); p=&ob2; P->fu(); p->f(); Return 0; }

Статические аспекты полиморфизма относятся к понятиям раннего или позднего связывания. Позднее связывание (отраженное, динамическое касается событий происходящих во времени выполнения пр-мы).

Позднее связывание реализует следующим образом:

  1. Строится таблица адресов виртуальной ф-ции;

  2. Каждый объект класса содержит скрыты указатель на эту таблицу;

  3. Компилятор автоматически вставляет конструктор класса фрагменты при вызове ф-ций, её адрес извлекается из таблицы.

  1. Дайте определение понятию дружественная функция. Перечислите и объясните правила описания и использования дружественных функций. Объясните назначение дружественных функций и классов. Дайте определение понятию вложенный класс. Поясните особенности работы с вложенными классами.

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

При использование дружеских ф-ции следует учесть правила:

  1. Дружба не является симметричной;

  2. Дружба не является транзитивной;

  3. Отношения дружбы не наследуются.

Отношения дружбы нарушает принцип инкапсуляции, поэтому друзей необходимо выбирать осторожно.

Вложенные классы.

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

Чтобы открыть доступ они должны быть объявлены друзьями. Для того чтобы объект вложенного класса, можно было объявить вне объемлющего, вложенный класс должен иметь директиву доступа public.

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

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

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

Правила перегрузки

Они очень просты (на деле очень сложны, здесь не приведено и половины, от неоднозначностей страдают даже опытные девелоперы). Функции должны отличаться количеством или хотя бы типом аргументов. Причём типы должны отличаться принципиально (см. ниже). Это то, что влияет на перегрузку. Когда вы будете работать с классами, их функции-члены ещё можно перегружать так: все аргументы имеют одинаковые или похожие типы, но одна функция имеет слово «const» в конце (то есть является константной функцией-членом), а другая — не имеет.

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

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

Виртуальная функция называется чистой, если она определяется только, как спецификатор интерфейса, т.е не имеет реализации. Virtual тип_имя (параметры)=0

Читая виртуальная ф-ция определяется в производных классах. Клас который содержит хотя бы 1 чистую виртуальную ф-цию называется абстрактным. Он может быть только базовым или как базовый класс. Невозможно создать объект не принадлежащий абстрактному классу. Абстрактный класс не может использоваться в качестве параметров или типа. Абстрактный класс нельзя использовать в явном при образование типов. Можно определять указатели или ссылку на абстрактный класс. Класс производный от абстрактного обязан определить чисто виртуальную ф-цию.

  1. Раскройте понятие перегрузки операторов, объясните ее назначение. Приведите примеры использования перегрузки операторов в классах. Перечислите операторы, которые могут и не могут быть перегружены в языке программирования С++. Перечислите правила описания перегрузки бинарных операторов.

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

Операторы перегружаются путем составления описания ф-ций с телом и с заголовком причем имя ф-ции состоит из ключевого слова operator, за которым следует перегружаемый оператор. Нельзя перегружать следующие операторы:

«.», «.*», «::», «?:», sizeof.

Перегрузка операторов должна удовлетворять требованиям старшинства и ассоциативность оператора изменять нельзя.

Нельзя создавать новые операции.

Нельзя изменять количество аргументов или операторов.

Оператор не может иметь значения по умолчанию.

Оператор не может иметь неопределенное количество параметров.

Хотябы один из аргументов должен быть классом или ссылкой на него.

Следует помнить, что перегрузка операторов больше всего подходит для математических классов поэтому лучше сохранять их алгебраическую природу.

Class fraction

{int n,d; Public: Fraction(); Fraction(int n1, int d1){n=n1; d=d1;}

Fraction(const fraction &r){n=r.n; d=r.d;}

Friend istream &operator>>(istream& in, const Fraction&r);

Friend ostream &operator>>(ostream& out, const Fraction&r); };

Friend istream &operator>>(istream& in, Fraction&r)

{cout<<” Input the fraction”<<endl; In>>r.n; In>>r.d;}

Friend ostream &operator>>(ostream& out, const Fraction&r);

{out<<r.n<<’I’<<r.d<<endl; Return out; } Int main() {fraction x

Cin>>x; Cout<<x; Frection y(2,3); Cout<<y; Returm 0;}

Бинарные операторы.

Бинарную операцию можно перегружать как нестатическую ф-цию элемента класса с одними аргументами, либо как ф-цию не являющуюся элементом класса с двумя элементами.

Имя_класса operator @(const имя_класса & const имя_класса &), где @: + - * / %

  1. Раскройте понятие шаблон функции, объясните его назначение. Объясните реализацию свойств наследования и полиморфизма через шаблоны функций. Перечислите правила описания спецификаций шаблона функции, а также конкретизации шаблона функции. Приведите примеры.

Ф-ция которая абстрагируется от типа хотя бы одного из своих параметров, называется обобщенной. В С++ такие ф-ции определяются шаблонам записываются следующим образом: template <список_параметров> опере деление ф-ции.

Список параметров не может быть пустым и может содержать: типы, не-типы(non type), шаблоны класса. Праметры типа определяются следующим образом: class имя_парам_тиап .

Параметры не типа определяются как переменных любогго из след. Типов: целочисленных, плавоющих, перечисления, указателя или ччылки на объект или ф-цию.

Template <scass T> void swap <T& a, t&b>

{T temp;

Temp =a; a=b ; b=Temp;}

Параметр типа может быть типом возращения значения

Template <class T> Tmain (T a,int size)

{T m=a[0];

for (int i=1; I <size;++i)

if (m>a[i]) m=a[i];

return m;}

Процесс создания из шаблона конкретной ф-ции называется конкретизацией. Конкретизация может быть явной и неявной. Способность компилятора генерировать из шаблона различные ф-ции в соответствии с аргументами типами называется параметрическим полиморфизмом.

Объявления шаблона ф-ции в классе означает что этот класс может содержать бесконечно много различных ф-ций, которые являются специализациями шаблона. Не разрешается объявлять шаблонами виртуальные ф0ции, т.к возникают проблемы с ТВМ.

Шаблон может быть перегружен, т.е допускается определения нескольких шаблонов с одинаковыми именами.

  1. Раскройте понятие шаблон класса, объясните его назначение. Объясните реализацию свойств наследования и полиморфизма через шаблоны классов. Перечислите правила описания спецификаций шаблона класса, а также создания экземпляра класса на основе шаблона. Приведите примеры.

Timplate <список_параметров> определение класса;

Список параметров подчиняется тем же правилам, сто и шаблоны ф-ций.

Шаблоны класса называются параметризированными типами. Часто их используют для создания коллекций, т.е классов, которые переставляют собой набор элементов одного и того же типа(массив, стек, очередь)

Template <class T> class stack

{int size;

Int top;

I*a;

Public:

Stack (int size1){ size= size1; a =new; T[size], top=0;}

Void push (const T&n){a[top++]=n;}

Void pop (T&n){n=a[--top];}

Int main()

{int size2,k;

Cin>>size2; stak<int>st(size2); cin>>k;

St.push(k);

Cout<<st.pop();}

Return 0;}

  1. Дайте определение понятию исключение. Сформулируйте часто встречающиеся в программах исключительные ситуации. Опишите средства для обработки ошибочных ситуаций в языке С++. Поясните механизм их работы. Приведите примеры обработки исключительных ситуаций в С++

Синтаксически исключение представляют собой объект произвольного типа. Исключение генерирует выражение thor. Тело блока try содержит код . тело блока catch содержит обработчик исключения. Должен следовать сразу за блоком try.

Int devide (int a, int b)

{if (!b)

Throw “Zero dewde”

Returm a/b;}

Int main ()

{int n,m;

Cin>>n>>m;

Try

{cout<<devide(n,m);

Catch (char *str)

{cout<<str;}

Cout <<”ok!”;

Return 0 ;}

Для обработки нескольких исключений допускается использование нескольких последовательных catch. Если в try произошел выброс исключения управление передается первому обработчику тип которого соответствует типу выброшенного исключения. После обработки управление передается на первую инструкцию после последнего блока cath.

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с матрицами и массивами. Поясните, как обеспечить правильность ввода информации в поля в приложении

В некоторых случаях для ввода массива можно использовать компонент Memo. Компонент Memo позволяет вводить текст, состоящий из достаточно большого количества строк, поэтому его удобно использовать для ввода символьного массива. Компонент Memo добавляется в форму обычным образом. Значок компонента находится на вкладке Standard

Свойство

Name,Text,Lines,Lines .Count (Количествостроктекставполе Memo ),Left,Top,Height,Width

Компонент StringGrid представляет собой таблицу, ячейки которой содержат строки символов. Свойства компонента StringGrid приведены в табл.

Свойства компонента StringGrid

Свойство,Name,ColCount,RowCount,FixedCols,FixedRows,Cells,Font

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с датой и временем. Поясните, как получить при работе программы текущую дату и время

Получение текущей даты и времени

для получения текущей даты и времени воспользуйтесь функцией

Now() из модуля Sysutils.hpp . Отобразить полученные дату и

время можно следующим образом (Button1 - кнопка на форме):

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Form1->Caption = DateTimeToStr(Now());

}

Часы на форме с точностью до минут

Напишитеследующийкод:

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Label1->Caption = FormatDateTime("hh:nn",Time());

Timer1->Interval=10000;// меньше число, больше точность

}

компоненты DateTimePicker, MonthCalendar, CCalendar

Его свойство Kind определяет режим работы компонента: dtkDate — ввод

даты, dtkTime — ввод времени.

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с графической информацией и таймером. Поясните принцип работы и назначение компонента ImageList.

Компонент Image

Этот компонент отображает на форме иконку, bmp-файл или метафайл. Всем этим хозяйством у него заведует свойство Picture класса TPicture. Этот класс является контейнерным для трех вышеперечисленных типов изображений. Доступ к ним можно получить из вложенных свойств TPicture. Собственно TImage имеет довольно малое число свойств и методов.

При двойном щелчке на изображении появляется т.н. Редактор изображения

У этого компонента есть некоторые свойства, отвечающие за отображение

AutoSize - разрешает автоматическое изменение размеров компонента по размера изображения

Center- если AutoSize=false, то изображение помещается в центре компонента.

IncrementalDisplay- если true, то при загрузке больших файлов они будут показываться по частям по мере загрузки. Если же false, то сначала изображение загрузится полностью, а затем одним махом отобразится на экране.

Stretch - автоматически растягивает изображение по заданным размерам.

Transparent - считает цвет одного из угловых пикселей прозрачным

Ну, и конечно, канва изображения - свойство Canvas.

Это, собственно говоря, и все для свойств. Во время работы приложение может загрузить изображение или сохранить его в файл через методы LoadFromFile/SaveToFile или через класс TPicture.

Для работы с таймером, на вкладке systems выбираем компонент timer (enable, interval) (соб-я OnTimer)

Компонент ImageList предназначен для хранения набора однотипных изображений. Конечно, изображения можно хранить и по отдельности - но в наборе удобнее. ImageList можно рассматривать как массив изображений - в частности, к элементам такого набора вы можете обращаться по индексу.

Компонент ImageList расположен на вкладке Win32

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с мультимедийной информацией и таймером. Поясните правила и возможности работы с канвой

Для работы с мультимедийной инф-йисп-ся компоненты вкладки Samples: ColorGrid (меняет цыета) CGaudge (полоса загрузки) Ccalendar (календарь).

Также некоторые компоненты вкладки Win32: ImageList (длинна, ширина, имя, tag, цвет) (события OnChandge), ColorBox (enabled,style,selected) (соб-я OnChange,OnClick,OnEnter,OnExit)

Для работы с таймером, на вкладке systems выбираем компонент timer (enable, interval) (соб-я OnTimer)

В CBuilder свойство TBitmap::Canvas предоставляет доступ к поверхности рисования битового изображения. Рисование на холсте (canvas) изменяет пиксели нижележащего изображения.

Для холста битового изображения валидна любая операция рисования, а не только методы Draw и StretchDraw.

Объект TCanvas создается для изображения автоматически. Свойство Canvas является свойством только для чтения

Действие Методы Свойства

Определяет текущую позицию пера MoveTo PenPos

Рисует прямую до заданной точки LineTo PenPos

Рисует прямоугольник заданного размер Rectangle

Рисует эллипс заданного размера Ellipse

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с графиками и диаграммами. Поясните, как работают с диаграммами компоненты вкладки ActiveX.

Для работы с графиками и диаграммами в C++Builder существует компонент TChart (вкладка Additional) (backcolor, backimage, backwall, borderStyle, borderwidht, color, visible, page) (соб-я OnEnter,OnClick,onZoom,onScroll,onMouse)

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

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с базами данных по технологии ADO. Опишите принцип разработки приложения, работающего с базой данных по технологии ADO. Приведите примеры запросов с помощью языка SQL

Все компоненты для работы с ActiveXDataObject (ADO) находятся на закладке под одноименным названием. Для начала нам понадобится поместить на форму компонент TADOConnection - именно он будут отвечать за связь нашего приложения с физической базой данных. Далее не забудьте поместить и TDataSource - без него мы не сможем графически отобразить данные, он необходим для связи DataControls компонентов с компонентом TADOTable, который тоже поместите на форму (он нужен для связи с конкретной таблицей БД, аналогично TTable из BDE).

ADOConnection (СвойстваConnected,LoginPrint, методыonLogin) ADOTable (Connection, active,filter,readonly,tableName) (соб-я Connected, итд)

SELECT *FROM имятаблwhere имя

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с главным меню, контекстным меню и используются для удобной навигации в приложении. Поясните, как из приложения запустить другое приложение

MainMenu1-данный компонент находиться на вкладке standart предназначен он для отображения главного меню в верху приложения, основные свойства: items (для отображения кол-ва заголовков меню), images. Событие: OnChange. PopupMenu1 – предназначен для отображения контекстного меню при нажатии правой кнопкой мыши. Свойства: items(для отображения кол-ва пунктов), Images. Событие OnChange, OnPopup. Чтобы запустить приложение из приложения можно воспользоваться int WinExec(const char *CmdLine, unsigned int CmdShow); Параметр CmdLine является указателем на строку с именем файла, СmdShow – определяет форму представления окна запускаемого приложения. Или ShellExecute.

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с древовидными структурами, например, для работы с каталогами и файлами системы. Поясните, как из приложения открыть и распечатать документ.

TreeView1- Предназначен для отображения древовидной структуры некоторых папок и файлов для быстрого нахождения какого либо файла, данный компонент находиться на вкладке Win32. FileListBox – списки файлов; FilterComboBox – выпадающие списки фильтров (масок) файлов. DirectoryListBox – списки каталогов; DriveComboBox – выпадающие списки дисков (драйверов); CDirectoryOutline – дерево каталогов.

Основные свойства Items, Readonly, Enable. Методы: Onclick, Onexit, OnMauseUp и т.д. Печать с помощью метода ShellExecute Необходимо подключение модуля <ShellApi.h>. Следующие операторы вызовут печать файлов с именем Test.txt средствами NodePad и Test.doc с помощью Word.

  1. Дайте характеристику и опишите основные свойства и события компонентов и механизмов среды C++ Builder, которые используются для настройки окон приложения под нужды пользователя. Поясните, как обеспечить переход приложения на другой естественный язык.

Основные свойства для настроики окон приложения Align, Color(меняет цвет формы), Visible(скрывает форму), Withe, Heigth(меняет размеры ширины и высоты формы), Position(позицию окна при запуске), FormStyle(Стиль формы), BorderStyle. Первый путь: Использование ini-файлов, по числу возможных языков. При переключении между языками ищем нужный файл, проходим по всем компонентам всех форм и меняем текст на считанный из файла.

Второй путь: Воспользоваться мастером Resource DLL Wizard, с помощью которого создать копии приложения на разных языках. Тем самым мы изолируем ресурсы. Все, что может подвергаться изменениям вносится в динамически присоединяемые библиотеки. Тогда приложение в зависимости от локализации Windows, установленной на конкретном компьютере, сможет подключать соответствующую этой локализации библиотеку.

  1. Дайте характеристику и опишите основные свойства и события компонентов среды C++ Builder, которые используются для работы с меню, панелями инструментов, ползунками, полосами состояний. Поясните принцип работы, назначение и преимущества использования компонента ActionList.

Для работы с меня преднозначены такие компонент как MainMenu, PopupMenu1 Находящиеся на вкладке standart основное свойство items(установка кол-ва пунктов). ScrollBar –ползунок находиться на вкладке standart основный свойства: Pagesize, Max, Min, Kind (устанавливает горизонтальный или вертикальный ползунок). ProgressBar, TrackBar, StatusBar –строки состояния находятся на вкладке Win32, основные свойства: Panels, Max, Min, Enable. ActionList, предназначен для, составление списка действий, которые будет выполнять приложение; Описание для каждого действия: пиктограмм, «горячих» клавиш, подсказок, надписей, кодов и т.д.; Формирование полос действий – главное меню, кнопки и инструментальные панели; Связь всех компонентов: пункт меню/кнопка/инструмент на панели/действие/список пиктограмм. Находиться на вкладке Standart.

  1. Дайте характеристику и опишите основные свойства, события и возможности при работе с курсором и мышью в среде C++ Builder. Объясните принципы технологии Drag&Drop в применении к среде C++ Builder.

Технология Drag&Drop предназначена для перетаскивания объектов. Все свойства, методы и события, связанные с процессом перетаскивания, определены в классе TControl, являющемся родителем всех визуальных компонентов. Поэтому они являются общими для всех. Начало процесса перетаскивания определяется свойством DragMode. При выборе автоматического значения событие OnMouseDown вообще не наступает. Выбор ручного значения говорит о том, что начало процесса перетаскивания должен определять программист. OnMouseDown, OnMouseMove, OnMouseUp, DragCursor - основные свойства мыши и курсора.

  1. Охарактеризуйте язык C#, опишите историю его создания и развития. Перечислите основные типы данных языка, сравните их с типами данных языков С/С++. Опишите принцип работы операторов ввода/вывода. Перечислите основные методы классов Console, Math.

Язык C# появился на свет в июне 2000 г. в результате кропотливой работы большой группы разработчиков компании Microsoft

      Появление языка C# и инициативы .NET отнюдь не случайно пришлось на начало лета 2000 г. Именно к этому моменту компания Microsoft подготовила промышленные версии новых компонентных технологий и решений в области обмена сообщениями и данными

Несомненно, лучшим способом продвижения этих новинок является создание инструментария для разработчиков с их полноценной поддержкой. В этом и заключается одна из главных задач нового языка C#

Авторы C# стремились создать язык, сочетающий простоту и выразительность современных объектно-ориентированных языков (вроде Java) c богатством возможностей и мощью C++. По словам Андерса Хейлсберга, C# позаимствовал большинство своих синтаксических конструкций из C++. В частности, в нем присутствуют такие удобные типы данных, как структуры и перечисления

Синтаксические конструкции С# унаследованы не только от C++, но и от Visual Basic. Например, в С#, как и в Visual Basic, используются свойства классов. Как C++, С# позволяет производить перегрузку операторов для созданных вами типов Java не поддерживает ни ту, ни другую возможность). С# — это фактически гибрид разных языков.

Одной из областей, для которых не предназначен этот язык, являются критичные по времени и высокопроизводительные программы, когда имеет значение, занимать исполнение цикла 1000 или 1050 машинных циклов, и освобождать ресурсы требуется немедленно

Особенности С#:

- Полный и хорошо определенный набор основных типов. - Встроенная поддержка автоматической генерации XML-документации. Автоматическое освобождение динамически распределенной памяти. - Возможность отметки классов и методов атрибутами, определяемыми пользователем.

- Полный доступ к библиотеке базовых классов .NET

- Указатели и прямой доступ к памяти

- Поддержка свойств и событий в стиле VB.

- Простое изменение ключей компиляции

- Возможность использования С# для написания динамических web-страниц ASP.NET.

Методы класса console: read, readline, readkey, write, writeline, clear, setcursorposition, beep.

Методы класса Math: abs, sin, cos, tan, sqrt, round, pow, min, max, log, floor, exp, min, max.

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