Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Встроенные (inline) функции




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

Имена-этикетки

Лекция 17

 

В С++ struct, union, enum являются именами типа переменных точно так, как int, long, float, double и т.д. Поэтому, в отличие от языка С при определении переменных нет необходимости употреблять эти ключевые слова.

Пример 1.

struct man

{

};

man x,y; //Не нужно писать struct man

Пример2.

enum girl {Kate, Ann, Elen};

struct fellow

{

char*name;

girl assistant;

};

fellow x={“Tolik”, Ann};

fellow y,z;

Перед girl не нужно писать enum, а перед fellow – слова struct.

 

Обозначается двумя двоеточиями ::. Используется для обращения к глобальной переменной, имеющей такое же имя, как и у локальной.

Если перед идентификатором переменной стоят два двоеточия, значит используется глобальная переменная.

Пример

#include <stdio.h>

double x=1Ø; //глобальная переменная

void main()

{

double x=1ØØ; //локальная переменная

printf(“Глобальная переменная х=%f\n”,::x);

printf (“Локальная переменная x=%f\n”,x);

for (int i=Ø;i<2;i++)

{

double x=1ØØØ; //Переменная, существующая только в этом блоке

printf(“Внутри блока x=%f\n”,x);

}

}

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

 

inline – модификатор определения функции. Предписывает компилятору помещать расширение тела функции везде, где происходит обращение к ней, вместо того, чтобы генерировать код вызова. В inline - функциях недопустимы операторы while, do while, for, switch, goto, а также ассемблерные вставки.

ВНИМАНИЕ! inline - функция должна быть определена до первого ее вызова. Даже если перед прототипом поставить ключевое слово inline, но определить эту функцию после ее вызова, то компилятор генерирует вызов (!) функции вместо создания inline -расширения.

Если inline - функция не является методом класса (об этом позже), то слово inline пишут при определении функции, а не перед прототипом.

Пример.

#include <stdio.h>

inline float min(float a,float b)

{

return a>b? a:b;

}

void main ()

{

float x,y,v;

puts(“введите x,y”);

scanf (“%f%f”,&x,&y);

v=min(x, y);

printf(“v=%f\n”,v);

}

На месте вызова функции min() будет код тела этой функции.

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

 

17.4 Гибкие операторы динамического распределения памяти: new, delete

Для управления распределением динамической памяти С++ предоставляет операторы new и delete (или new[ ], delete[ ]). В программах на языке С использовались для этой цели библиотечные функции malloc(), calloc() и free (). Эти функции, как и все функции С, можно использовать и в С++. Однако операторы С++ обладают расширенными возможностями. Так, функции malloc(), calloc() возвращают пустой указатель void*. Поэтому в случае необходимости выделить память под какой-либо тип переменной, отличный от void, в С++ требуется явное преобразование типа. В то же время new возвращает указатель на тот тип, для которого выделяется память. Обращение к оператору new имеет вид:

указатель_на_тип=new тип;

указатель_на_тип=new тип [количество_элементов];

Например:

char*pch;

pch=new char; //Выделение памяти под 1 символ

pch=new char[1Ø]; //Выделение памяти под 10 символов.

Освобождается память с помощью оператора delete.

delete указатель_на_тип;

delete[ ] указатель_на_тип;

Второй вариант вызова delete необходимо использовать при освобождении памяти, выделенной функцией new[ ] под массив.

Примеры:

1) int*pi=new int;

*pi=124;

delete pi;

2) struct car

{

- - -

};

car*pcar=new car[1Ø];

/* выделена память под 10 элементов car */

delete [ ] pcar; //освободили память

Для сравнения приводится malloc() и free().

struct flower

{

- - -

};

flower*pflower;

pflower=(flower*)malloc(1Ø*sizeof(flower));

free(pflower);

17.5 Объектно-ориентированное программирование на С++. Классы в С++

 

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

Каждый представитель класса называется объектом. В некотором смысле можно рассматривать класс как средство расширения языка.

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

Вместо ключевого слова struct могут употребляться class или union.

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

 




Поделиться с друзьями:


Дата добавления: 2015-06-27; Просмотров: 416; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.016 сек.