Работа с динамической памятью — КиберПедия 

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...

Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...

Работа с динамической памятью

2017-06-05 320
Работа с динамической памятью 0.00 из 5.00 0 оценок
Заказать работу

В языке C++ для работы с динамической памятью введены операции new и delete [5, 8-9], которыми можно пользоваться наряду с функцией стандартной библиотеки С malloc, calloc и free.

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

Ее синтаксис: new тип;

new тип (выражение-инициализатор);

new тип [ выражение_размерность_массива ];

Операция delete освобождает распределенную операцией new память. Ее синтаксис:

delete указатель_на_объект;

delete [ ] указатель_на_массив_объектов;

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

Практическое изучение первого принципа ООП – механизма инкапсуляции

Подготовка к лабораторной работе № 1

Программирование точечных конфигураций на плоскости

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

Вычисление декартовых координат вершин правильного треугольника

Разработать ООП для вычисления декартовых координат вершин правильного треугольника с заданной длиной стороны, центр которого лежит на оси Х (рисунок 1). Длина стороны треугольника должна передаваться программе через аргумент командной строки, а полученные координаты должны отображаться через стандартный вывод. Программная реализация вычислений должна быть основана на разработке класса точки с приватными полями ее декартовых координат и публичными методами доступа к ним и конструктором инициализации их значений. Кроме того нужно предусмотреть статический метод конструирования точки по ее полярным координатам (программа polar.cc).

 

Рисунок 1 – К постановке задачи вычисления декартовых координат правильного треугольника

 

// Программа polar.cc

#include <stdlib.h>

#include <math.h>

#include <iostream.h>

// Класс Point2 точки плоскости

class Point2 {

private:

float x;

float y;

Point2(float _x, float _y): x(_x), y(_y) { };// приватный конструктор

public:

float getx() { return x; }; // доступ к x

float gety() { return y; }; // доступ к y

static Point2 Polar(float, float); // именованный конструктор точки - статический метод

Point2() { x=y=0.0; }; // конструктор по умолчанию (для массива точек)

}; // Point2

// конструирование точки по полярным координатам

inline Point2 Point2:: Polar(float R, float F) {

Point2 p(R*cos(F), R*sin(F)); // перевод полярных координат в декартовы

return p; // возврат объекта класса точки

}; //polar

// основная функция

int main(int argc, char* argv[ ]) {

float edge = 1.0; // сторона треугольника (1.0 – длина по умолчанию)

float angle = 0.0; // полярный угол вершины

float pi; // число pi

pi = acos (-1.0); // вычислить pi (можно M_PI из math.h)

float radius; // радиус-вектор вершины

int i = 0; // счетчик вершин треугольника

Point2 vertex [3]; // массив вершин треугольника vertex[0], vertex[1], vertex[2]

if(argc > 1)

edge = atof (argv[1]);// получить длину стороны из командной строки

cout << "pi=" << pi << endl;

radius = edge / (2*sin(pi/3.0)); // радиус описанной окружности

while (i<3) { // цикл вычисления декартовых координат вершин

vertex[ i ] = Point2::Polar(radius, angle);

angle += ((4.0*pi)/3.0); // +120 градусов =4* pi/3

i++;

}// while

do { // Печать декартовых координат вершин в обратном порядке

--i;

cout << vertex[ i ].getx() << ';' << vertex[ i ].gety() << endl;

} while(i > 0); //do- while

return (0); // Корректное завершение программы

}// main


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

Автоматическое растормаживание колес: Тормозные устройства колес предназначены для уменьше­ния длины пробега и улучшения маневрирования ВС при...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

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

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.014 с.