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

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...

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

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

2017-06-05 313
Работа с динамической памятью 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


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

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

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

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

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...



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

0.009 с.