1 / 24

Статични член-данни и статични член-функции . Масиви от обекти.

Статични член-данни и статични член-функции . Масиви от обекти. Член – данни (член – променливи) : Автоматични Статични. Член - променливи Автоматични член - променливи –> те се инициализират от конструктора при създаването на обект. class primer1 { int n; float x; public:

huslu
Download Presentation

Статични член-данни и статични член-функции . Масиви от обекти.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Статични член-данни и статични член-функции. Масиви от обекти. • Член – данни (член – променливи) : • Автоматични • Статични

  2. Член - променливи • Автоматични член - променливи –> те се инициализират от конструктора при създаването на обект. class primer1 { int n; float x; public: . . . }; primer1 a, b; a.n a.n a.n a.n b.n b.n b.n b.n b.n a.x a.x a.x a.x b.x b.x b.x b.x Обект a Обект a Обект a Обект a Обект b Обект b Обект b Обект b

  3. Статични член-данни и статични член-функции. Масиви от обекти. • Статични член - променливи • Памет за статична член-променлива се заделя винаги, дори и без да е създаден обект. • Памет се заделя еднократно при задължителното им дефиниране след декларацията на класа. • Обектите от даден клас ползват обща статична член-данна. • Достъпът е възможен чрез името на класа или обект от класа. По подразбиране – стойност = 0 class име_на_клас { static тип име_на статична променлива; . . . }; тип име_на_клас::име_на_статична_променлива = стойност;

  4. Статични член – променливи a.n b.n class primer2 { static int n; float x; public: . . . }; int primer2 :: n; или int primer2 :: n=5; primer2 a, b; a.x b.x Обект a Обект b Подразбираща се инициализация с нула - задължителна Явна инициализация - задължителна

  5. Статични член-данни и статични член-функции. Масиви от обекти. Статични член функции • Те са независими от обектите. • Извикват се чрез името на класа и оператора за действие ::или чрез обект на класа. • Оперират със статични член-данни. Останалите член-данни са недостъпни за тях (свързани са с конкретен обект). class име_на_клас { . . . public: staticтип_на резултатиме_на статична функция(параметри); . . . };

  6. Статични член-данни и статични член-функции. Масиви от обекти. Статични член функции • Пример за статична функция, която извежда броят от обектите. #include <iostream.h> 1/2 class object { static int c; //брой обекти public: object() { c++; cout<<”нов обект\n”; } ~object() { c--; cout<<”разрушен обект\n”; } static void count(); //за извеждане брой обекти }; int object::c;//дефиниция и инициализация с 0 void object::count() //дефиниция на статична функция { cout<<”брой обекти=”<<c<<”\n”; }

  7. Статични член-данни и статични член-функции. Масиви от обекти. Статични член функции • Пример за статична функция, която извежда броят от обектите. void f()2/2 { object u,v; object::count(); } void main() { object::count(); object a; a.count(); f(); object::count(); } брой обекти=0 нов обект брой обекти=1 нов обект нов обект брой обекти=3 разрушен обект разрушен обект брой обект=1 разрушен обект

  8. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Статични или автоматични масиви • Неявно инициализиране – чрез използване на конструктор без параметри – конструкторът се извиква за всеки елемент от масива. • Явно инициализиране - използване на инициализатор – списък от изрази, всяка стойност се предава като параметър на конструктор.

  9. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Статични или автоматични масиви #include <iostream.h> class point { int x,y; public: point(int a=0,int b=0) //конструктор с 0,1,2 параметъра { x=a; y=b; cout<<”конструктор:”<<x<<” “<<y<<”\n”; } }; void main() { int n=3; point line[5]={7,n,2*n+5}; } С инициализатор конструктор:7 0 конструктор 3 0 конструктор:11 0 конструктор:0 0 конструктор:0 0 С конструктора без параметри

  10. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Статични или автоматични масиви • Достъпът до елементите на масива е пряк и се осъществява по стандартния начин – чрез индексирани променливи: line[0], line[1], …line[4] • Възможни са следните обръщения:line[i].out(); или line[i].произволнаІфункция(); • Връзката между масиви и указатели е в сила и в случая когато елементите на масива са обекти. Името на масива е указател към първия му елемент. point *p=line; //р сочи към line[0]

  11. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Статични или автоматични масиви • Пример class example { inta; inttable[10]; public: intarray[10]; } x[5]; . . . x[i].table[j]=33; дефинира масив с 5 компоненти, които са от тип example Достъп до i-ти елемент на масива exampleиj-ти на table

  12. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Статични или автоматични масиви • Пример const NUM = 5; class student { public: void read_student(); void print_student() const; int is_better(student const &) const; double average() const; private: int facnom; char name[26]; double marks[NUM]; }; . . . student table[30]; Няма явно дефиниран конструктор в класа Инициализацията се осъществява чрез извикване на “системния” конструктор по подразбиране за всеки обект – елемент на масива.

  13. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Статични или автоматични масиви • Пример class point {private: int x,y; public: point(int = 0, int =1); void read(); int get_x() const; int get_y() const; voidprint() const; }; . . . point x[10]; // x[i] се инициализира с 0/1, за всяко i=0,1,...9. point x[10] = {1,2,3,4,5,6,7,8,9,10}; //x[i] == i/1 point x[10] = {point(1,21),point(2),point(3, 5),4,5,6,7,8,9,10}; Притежаваявнодефиниран конструктор с два подразбиращи се параметъра Промяна на конструктора в: point(int,int);е грешка

  14. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Динамични масиви • Инициализацията се извършва чрез конструктор без параметри и се прави при дефиниране на масива като конструкторът се извиква за всеки елемент. • Не се допуска предаване на параметри на конструктор чрез инициализатор.

  15. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Динамични масиви - пример #include <iostream.h> 1/2 #include <stdlib.h> #define MAX 5 class tri { float a,b,c; public: tri() { cout<<”конструктор\n”; } ~tri() { cout<<”деструктор\n”; } void init(float i, float j, float k) { a=i; b=j; c=k; } void out() { cout<<”Страни на триъгълник:”<<а<<”,”<<b<<”,”<<c<<”\n”; } }; за инициализация

  16. Статични член-данни и статични член-функции. Масиви от обекти. Масиви от обекти • Динамични масиви - пример Резервиране на памет за динамичен масив – извиква се конструктор void main() 2/2 { tri *array; array=new tri[MAX]; if(!array) exit(1); int x,y,z,i=0; while(cout<<”въведи * за край:”,(getche())!=’*’&&i<MAX) {cout<<”\nx=”; cin>>x; cout<<”y=”; cin>>y; cout<<”z=”; cin>>z; (array[i]).init(x,y,z); (array[i]).out(); i++; } delete []array; } Конструктор – 5 пъти въведи * за край:а х=1 у=2 z=3 страни на триъгълник:1,2,3 въведи * за край:* Деструктор – 5 пъти Инициализира елемент Освобождаване на динамична памет

  17. Масиви от обекти • Пример: Да се състави програма за въвеждане в масив с максимален брой 30 на информация за компютри ( име на модела (name), цена (price) и точки (score) - между 1 и 100). Да се изведе въведената информация, след което да се изведе сортирана в низходящ ред по съотношението точки/цена.

  18. Масиви от обекти #include <iostream.h> 1/6 #include <iomanip.h> #include <string.h> #define MAX 30 class product { private: char name[21]; double price; int score; public: void read(); void print() const; int is_better_from(product const &) const; double get_price() const; int get_score() const; }; Декларация на клас

  19. void sorttable(int n, product* []); 2/6 void main() {product table[MAX]; product* ptable[MAX]; int n; do {cout << “брой продукти? "; cin >> n; } while (n<1 || n>MAX); int i; for (i = 0; i <= n-1; i++) { table[i].read(); ptable[i] = &table[i]; } cout << “масив - начален: \n"; for (i = 0; i <= n-1; i++) { table[i].print(); cout << endl; } Масиви от обекти Декларация на външна функция за рбота с масива Дефиниране на масив от обекти и масив от указатели към обекти Попълване на двата масива Извеждане на началния масив

  20. Масиви от обекти sorttable(n, ptable); 3/6 cout << "\n нов масив след сортиране: \n"; for (i = 0; i <= n-1; i++) {ptable[i]->print(); cout << setw(7) << ptable[i]->get_score()/ptable[i]->get_price() << endl; } } Сортиране на масива Извеждане на сортирания масив

  21. Масиви от обекти void product::read() 4/6 {cout << "name: "; cin >> name; cout << "price: "; cin >> price; cout << "score: "; cin >> score; } void product::print() const {cout << setw(25) << name << setprecision(2)<<setw(10)<<price << setw(12) << score; } Дефиниране на член функция за попълване на обект Дефиниране на член функция за извеждане на обект

  22. Масиви от обекти int product::is_better_from(product const & x) const 5/6 {return score/price > x.score/x.price; } double product::get_price() const {return price; } int product::get_score() const {return score; } Дефиниране на член функция за сравнение Дефиниране на интерфейсна член функция Дефиниране на интерфейсна член функция

  23. Масиви от обекти void sorttable(int n, product* a[]) 6/6 {for (int i = 0; i <= n-2; i++) {int k = i; product* max = a[i]; for (int j = i+1; j <= n-1; j++) if (a[j]->is_better_from(*max)) {max = a[j]; k = j; } max = a[i]; a[i] = a[k]; a[k] = max; } } Дефиниция на външна функция за рбота с масива

  24. Масиви от обекти брой продукти? 3 name: aaa price: 1000 score: 77 name: bbb price: 500 score:11 name: ccc price: 800 score: 44 масив – начален: ааа 1000.00 77 bbb 500.00 11 ccc 800.50 44 нов масив след сортиране: aaa 1000.00 77 0.08 bbb 800.50 44 0.05 ccc 500.00 11 0.02 Резултати от изпълнение на програмата

More Related