Материал: Программирование на языке высокого уровня Лекции 09.03.01

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

for (i=1;i<j;i++) printf("mass[%d]=%d\n",i,aaa(i));

}

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

Тема 30. Операция разрешения видимости.

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

# include <stdio.h> int a=10;

int main(void) { int a=100; if(a>0)

{int a=1000; printf("a=%d\n",a); printf("a=%d\n",::a);

}

return 0;

}

Тема 31. Перегруженные функции.

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

void Showmes(int); void Showmes(char*);

Тогда при вызове

Showmes(1)

будет подключаться функция

void Showmes(int nom)

Программирование на языке высокого уровня 09.03.01

36

{printf("Message:%s\n",spisok[nom]);

},

а при вызове Showmes("Ошибка") будет подключена фунция void Showmes(char* msg)

{printf("Message:%s\n",msg);

}

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

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

void fff(int i) int fff(int i) void fff(char i) void fff(char * i)

@fff$qi @fff$qi @fff$qc @fff$gpc.

Программирование на языке высокого уровня 09.03.01

37

Раздел 5. Введение в объектно-ориентированные элементы языка С++ (часть 1) Лекции 23-30.

Тема 32. Определение класса. Понятие о спецификаторах доступа.

Класс можно считать расширением понятия структурного типа,

то

есть типа данных, определяемого пользователем. В С++ при

задании

такого

нового типа

можно задать и некое его поведение,

то

есть определить какие-то функции,

доступные только

для данных

этого

типа.

Переменная,

которая

описывается в

качестве

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

Класс определяется так же как и структура, за исключением того, что:

1) определение класса содержит одну или несколько спецификаций доступа, задаваемых с помощью ключевых слов public, protected или private;

2) наравне с ключевым словом struct могут применяться слова class или union;

3) наряду с элементами данных определение обычно включает в себя элементы-функции (методы);

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

Пример определения класса, содержащего только элементы данных:

struct rect

{int x1; int y1; };

Примеры расширенного определения класса: struct point

{ private: int x; int y;

public: int Getx(); int Gety();

void Setx(int); void Sety(int);

}; class line

{point pt1; point pt2;

int width;

public: line (int x; int y); ~line();

Программирование на языке высокого уровня 09.03.01

38

};

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

при метке private - элементы данных и функции элементы доступны только для функций-элементов этого класса;

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

при метке protected - элементы данных и функцииэлементы доступны для функций-элементов данного класса и классов, производных от него.

ВС++ структура, класс и объединение рассматриваются

как типы классов. Структура и класс походят друг на друга за исключением доступа по умолчанию: в структуре элементы имеют по умолчанию доступ public, в то время как в классе - private. Объединение, аналогично структуре, предоставляет по умолчанию доступ public, а в остальном оно ведет себя аналогично объединению в С.

Тема 33. Элементы класса.

Элементы класса делятся на две основные категории: данные,

показывающие состояние

объектов, и

функции, реализующие

поведение

этих объектов.

 

 

Элементы-данные классов С++ похожи

на элементы структур

языка С с

некоторыми дополнениями:

 

элементы-данные не могут объявляться как extern или register;

элементы-данные могут быть перечислениями, битовыми полями, а также представителями ранее объявленных классов;

элементом данных класса не может быть представитель самого этого класса;

элемент данных класса может быть указателем или ссылкой на сам класс.

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

Программирование на языке высокого уровня 09.03.01

39

операция разрешения видимости. Функцию, определенную вне класса тоже можно сделать встроенной, указав в заголовке определения ключевое слово inline.

struct point { private: int x;

int y;

public: int Getx() {.....}//встроенные int Gety() {.....}

void Setx(int); void Sety(int); };

void point::Setx (int xx) // не встроенные {.....}

void point::Sety (int yy) {.....}

Тема 34. Организация доступа к элементам класса.

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

1)с существующим представителем класса, за которым следует операция доступа к элементу (.);

2)с указателем на существующий представитель класса, за которым следует операция косвенного доступа к элементу (- >);

3)с именем класса, за которым следует операция разрешения видимости.

class coord

{public: int x;

int y;

};

void main (void)

{coord org;

coord * orgptr=&org;

org.x=0; orgptr->y=0;

}

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

Программирование на языке высокого уровня 09.03.01

40

Источник: https://studfile.net/preview/16415559/