Массивы объектов в классах. Примеры. Массивы объектов в unmanaged и managed классах. Массив unmanaged (*) указателей на объект класса
Содержание
- 1. Пример использования массива объектов в неуправляемом (unmanaged) классе
- 2. Пример использования массива объектов в управляемом (managed) классе
- 3. Пример использования массива unmanaged-указателей на объект класса
- Связанные темы
Поиск на других ресурсах:
1. Пример использования массива объектов в неуправляемом (unmanaged) классе
Задан класс CMyPoint, реализующий точку на координатной плоскости. Также задан класс CPolygon, реализующий ломаную линию. В классе CPolygon объявляется массив из 10 объектов типа CMyPoint.
Реализация класса CMyPoint:
// класс описывает точку на координатной плоскости class CMyPoint { int x, y; public: // конструктор класса CMyPoint(void) { x = y = 0; } // методы доступа int GetX(void) { return x; } int GetY(void) { return y; } void SetXY(int nx, int ny) { x = nx; y = ny; } };
Реализация класса CPolygon
// класс, который описывает ломаную линию class CPolygon { int n; // количество точек CMyPoint cp[10]; // массив точек public: // конструктор класса CPolygon(void) { n = 0; } // методы доступа CMyPoint GetPoint(int index) { return cp[index]; } // устанавливает новое значение заданной точки void SetPoint(int index, CMyPoint & pt) { if (index>=n) return; cp[index] = pt; } // добавляет точку к ломаной void AddPoint(CMyPoint pt) { if (n<10) n++; else return; cp[n-1] = pt; } // определяет длину ломаной double Length(void) { double len, t; int x1, y1, x2, y2; len = 0; for (int i=0; i<n-1; i++) { x1 = cp[i].GetX(); y1 = cp[i].GetY(); x2 = cp[i+1].GetX(); y2 = cp[i+1].GetY(); t = System::Math::Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); len += t; } return len; } };
Демонстрация использования классов CPolygon и CMyPoint в некотором методе
// демонстрация использования класса CPolygon CPolygon p1; CMyPoint pt1; // сформировать ломаную с координатами (1; 2), (3; 4), (5;6) pt1.SetXY(1, 2); p1.AddPoint(pt1); pt1.SetXY(3, 4); p1.AddPoint(pt1); pt1.SetXY(5, 6); p1.AddPoint(pt1); // проверка int x, y; CMyPoint pt2; pt2 = p1.GetPoint(0); x = pt2.GetX(); // x = 1 y = pt2.GetY(); // y = 2 pt2 = p1.GetPoint(1); x = pt2.GetX(); // x = 3 y = pt2.GetY(); // y = 4 // длина ломаной double d = p1.Length(); // d = 5.6568...
2. Пример использования массива объектов в управляемом (managed) классе
Реализация класса CMyPoint
// класс, который описывает точку на координатной плоскости ref class CMyPoint { int x, y; public: // конструктор класса CMyPoint(void) { x = y = 0; } // методы доступа int GetX() { return x; } int GetY() { return y; } void SetXY(int nx, int ny) { x = nx; y = ny; } };
Реализация класса CPolygon
// класс, который описывает многоугольник ref class CPolygon { int n; // количество точек в многоугольнике array <CMyPoint ^> ^mp; // массив точек CMyPoint public: // конструктор без параметров CPolygon(void); // конструктор с 2 параметрами, которые получает массив точек CMyPoint CPolygon::CPolygon(int n, array <CMyPoint^> ^mp2); // методы доступа CMyPoint^ GetPoint(int index); // возвращает точку void AddPoint(int nx, int ny); // добавляет точку к ломаной double Length(void); // определяет длину ломаной }; // конструктор класса CPolygon::CPolygon(void) { n = 0; // выделить память - только 1 раз // для массива в целом mp = gcnew array <CMyPoint^>(10); // для каждого элемента массива for (int i=0; i<10; i++) mp[i] = gcnew CMyPoint; } // конструктор с 2 параметрами - инициализируется массивом значений CPolygon::CPolygon(int n, array <CMyPoint^> ^mp2) { if (n>10) return; this->n = n; // присвоить массив mp = mp2 for (int i=0; i<n; i++) { mp[i] = mp2[i]; } } // методы доступа // взять точку с заданным индексом CMyPoint^ CPolygon::GetPoint(int index) { return mp[index]; } // добавить точку к ломанной void CPolygon::AddPoint(int nx, int ny) { n++; mp[n-1]->SetXY(nx, ny); } // определить длину ломаной double CPolygon::Length(void) { int x1, y1, x2, y2; double len, t; CMyPoint^ pt; len = 0; // длина ломаной for (int i=0; i<n-1; i++) { x1 = mp[i]->GetX(); y1 = mp[i]->GetY(); x2 = mp[i+1]->GetX(); y2 = mp[i+1]->GetY(); t = System::Math::Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); len += t; } return len; }
Демонстрация использования классов в другом программном коде
// демонстрация использования класса CPolygon CPolygon^ cp; cp = gcnew CPolygon; // сформировать ломанную с координатами (1;2), (3;4), (5;6) cp->AddPoint(1, 2); cp->AddPoint(3, 4); cp->AddPoint(5, 6); // проверка int x, y; CMyPoint^ pt = gcnew CMyPoint; pt = cp->GetPoint(0); x = pt->GetX(); // x = 1 y = pt->GetY(); // y = 2 pt = cp->GetPoint(1); x = pt->GetX(); // x = 3 y = pt->GetY(); // y = 4 // определить длину ломаной double d; d = cp->Length(); // d = 5.6568...
3. Пример использования массива unmanaged-указателей на объект класса
Реализация класса CMyPoint
class CMyPoint { int x, y; public: // конструктор CMyPoint::CMyPoint(void) { x = y = 0; } // методы доступа int GetX(void) { return x; } int GetY(void) { return y; } void SetXY(int x, int y) { this->x = x; this->y = y; } };
Реализация класса CPolygon
// класс, который описывает ломаную линию class CPolygon { int n; CMyPoint * mp[10]; // массив указателей на CMyPoint public: // конструктор CPolygon(void) { n = 0; // выделение памяти - только один раз for (int i=0; i<10; i++) { mp[i] = new CMyPoint; } } // методы доступа CMyPoint GetPoint(int index) { return *mp[index]; } void SetPoint(int index, CMyPoint& p) { int x, y; x = p.GetX(); y = p.GetY(); mp[index]->SetXY(x, y); } // добавить новую точку void AddPoint(int x, int y) { mp[n++]->SetXY(x, y); } // вычисление длины ломаной double Length(void) { double len, t; int x1, y1, x2, y2; len = 0; for (int i=0; i<n-1; i++) { x1 = mp[i]->GetX(); y1 = mp[i]->GetY(); x2 = mp[i+1]->GetX(); y2 = mp[i+1]->GetY(); t = System::Math::Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); len = len + t; } return len; } };
Фрагмент метода, который демонстрирует использование класса CPolygon
// демонстрация использования массива unmanaged-указателей на объект класса CPolygon cp; // объект класса // сформировать ломаную из трех точек cp.AddPoint(1, 2); cp.AddPoint(3, 4); cp.AddPoint(5, 6); // проверка int x, y; CMyPoint mp; mp = cp.GetPoint(0); x = mp.GetX(); // x = 1 y = mp.GetY(); // y = 2 // определение длины ломаной double d; d = cp.Length(); // d = 5.6568...