Масиви об’єктів у класах. Приклади. Масиви об’єктів в 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...