Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного хозяйства...
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Как мы говорим и как мы слушаем: общение можно сравнить с огромным зонтиком, под которым скрыто все...
Дисциплины:
2017-06-05 | 320 |
5.00
из
|
Заказать работу |
|
|
В языке 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; }; // доступ к ystatic 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 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!