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

Ограничение на наследование

При определении производного класса не наследуются из базового: конструкторы; деструкторы; операторы new, определенные пользователем; операторы присвоения, определенные пользователем; отношения дружественности.

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

2. Класс в ооп и его основные компоненты.

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

Данные класса – это то, что класс «знает».

Функции – члены (методы) класса – это то, что класс «делает».

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

Объявление класса

class my_Fun

{// компоненты-данные

double x,y;

// компоненты-функции

public:

// функция инициализации

void set(char *c,double X)

{x=X;y=sin(x); }

// функция вывода результатов

void print(void)

{cout << point<<y << endl; }};

Обычно описания классов включают в заголовочные файлы (*.H), а реализацию функций-членов классов – в файлы *.CPP.

Для каждого объекта класса устанавливается область видимости либо явно – указанием уровня доступа одним из ключевых слов public, private, protected с двоеточием, либо неявно – по умолчанию. Указание области видимости относится ко всем последующим объектам класса, пока не встретится указание другой области видимости. Область видимости public разрешает доступ к объектам класса из любой части программы, в которой известен этот объект (общедоступный). Область видимости private разрешает доступ к объектам класса только из методов этого класса. Объекты с такой областью видимости называют частными. Область видимости protected определяется для защищенных объектов, она имеет смысл только в иерархической системе классов и разрешает доступ к объектам этой области из методов производных классов. В теле класса ключевое слово области видимости может использоваться неоднократно. Область видимости для объектов типа «класс» по умолчанию private.

3. Перегрузка функций.

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

Компилятор определяет, какую именно функцию требуется вызвать, по типу фактических параметров. Этот процесс называется разрешением перегрузки (перевод «уточнение»). Тип возвращаемого функцией значения в разрешении не участвует. Механизм разрешения основан на достаточно сложном наборе правил, смысл которых сводится к тому, чтобы использовать функцию с наиболее подходящими аргументами и выдать и выдать сообщение, если такой не найдется. Допустим, имеется четыре варианта функции, определяющей наибольшее значение:

//Возвращает наибольшее из двух целых:

int max(int. int);

//Возвращает подстроку наибольшей длины:

char*max(char*.char);

При вызове функции max компилятор выбирает соответствующий типу фактических параметров вариант функции (в приведённом примере будут последовательно вызваны все четыре варианта функции).

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

Неоднозначность может появиться при:

преобразовании типа;

использовании параметров-ссылок;

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

Пример неоднозначности: если одна из перегружаемых функций объявлена как int f(int a,int b), а другая – как int f(int a, int&b), то компилятор не сможет узнать, какая из этих функций вызывается, так как нет синтаксических различий между вызовом функции, которая получет параметр по значению, и вызовом функции, которая получает параметр по ссылке.

Правило описания перегруженных функций

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

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

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

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