Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Переменные, имеющие областью видимости блок, называются локальными переменными.




на примере.

{ //внешний блок
int a = 2, //объявление и инициализация переменной a
cout << a << '\n'; // выводит на экран 2
{ // вход во внутренний блок
int a = 7, // переменная аиз внутреннего блока
int s = a; //объявление и инициализация переменной s
cout << "s=" << s; //выводит на экран s=7
cout << "a=" << a << '\n'; //выводит на экран a=7
} //выход из внутреннего блока
cout << ++a << '\n'; // выводит на экран 3
cout << s << '\n'; //ошибка компиляции: переменная s не объявлена
} //выход из внутреннего блока

 

Класс памяти определяет порядок размещения объекта в памяти. Различают автоматический и статический классы памяти. C++ располагает четырьмя спецификаторами класса памяти:

auto

register

static

extern

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

В свою очередь, статический класс памяти может быть локальным (внутренним) или глобальным (внешним).

Следующая таблица иллюстрирует иерархию классов памяти.

Динамический класс памяти Статический класс памяти
Автоматический Регистровый Локальный Глобальный
auto register static Extern

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

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

tatic. Спецификатор внутреннего статического класса памяти. Применяется только(!) к именам объектов и функций. В C++ этот спецификатор имеет два значения. Первое означает, что определяемый объект располагается по фиксированному адресу. Тем самым обеспечивается существование объекта с момента его определения до конца выполнения программы. Второе значение означает локальность.

extern. Спецификатор внешнего статического класса памяти. Обеспечивает существование объекта с момента его определения до конца выполнения программы.

Свободная память

Унарные операторы new и delete служат для управления свободной памятью.

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

Оператор new принимает следующие формы:

  • new имя_типа
  • new имя_типа инициализатор
  • new имя_типа [выражение]

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

  int *p, *q;
  p=new int(5);

 

  q=new int[10];
   

 

  delete выражение
  delete [] выражение

12) Объявление и инициализация одномерного и двумерного массивов. Работа с элементами массива через указатель.

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

int array[10];

В этом коде мы определили массив с идентификатором (именем) array (массив) из десяти элементов типа int. В таком виде, все элементы массива ещё неинициализированы. Чтобы инициализировать их при обьявлении, нужно использовать следующий синтаксис:

int array[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

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

int array[10]; //определение массива for (int i = 0; i < 10; i++){ array[i] = i;}

Простейшим многомерным массивом является двумерный. Давайте рассмотрим пример двумерного массива:

1.int twoArr [5] [15];

для получения доступа к элементу массива с координатами 5.5, то следует использовать запись:

1.int line [5][5];

Доступ к эелементам массива через указатели:-----------

 

13) Принципы ООП. Инкапсуляция. Наследование. Полиморфизм.

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

Инкапсуляция - это объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта (свойствами), а алгоритмы - объектными методами или просто методами.

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

Наследование - есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.

Пример наследования(3 класса наследуются поочереди)

#include <iostream>

using namespace std;

class transport

{

private:

int kolvo_koles;

string nazvanie_transporta;

public:

void vvod()

{cout<< "введите количество колёс: ";

cin>>kolvo_koles;

cout<< "введите название транспорта: ";

cin>>nazvanie_transporta;

}

void vivod()

{

cout<<"количество колёс: "<<kolvo_koles<<endl;

cout<<"название транспорта: "<<nazvanie_transporta<<endl;

}

};

class dlina: public transport

{

 

public:

int dlina;

void dis()

{

cout<<"Ваедите длину автобуса -->";

cin>>dlina;

}

void disp()

{

if(dlina>10)

cout<<"Длинный "<<endl;

else cout<<"Короткий"<<endl;

}

 

};

class passagirovmestimost: public dlina

{ int kolvo_pass;

public:

void one()

{cout<<"passagirovmestimost"<<endl;

 

}

void two()

{

if(dlina<20)

cout<<"kolichestvo 100-120"<<endl;

else cout<<"<120"<<endl;

}

};

int main()

{

setlocale(LC_ALL,"Rus");

transport Avtobus;

dlina q;

Avtobus.vvod();

q.dis();

Avtobus.vivod();

q.disp();

passagirovmestimost z;

z.one();

z.two();

system ("pause");

return 0;

}

Полиморфизм--------

14) Классы и объекты в языке С++. Утилиты класса. Определение класса (поля, методы, доступ к членам класса). Определение методов в классе и вне класса.

Определение класса должно располагаться до main.

Начнём с простых примеров:

class soldier{public: int x,y; int ammo;};
Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...