Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

техпрог / Comp-Sci-06

.pdf
Скачиваний:
44
Добавлен:
10.02.2015
Размер:
474.43 Кб
Скачать

Материалы к лекции 6.

Объектно-ориентированное программирование

Упорядочивание массива объектов

Вводный пример. Напомним метод пузырька для массивов.

//Sortmass.cpp : Defines the entry point for the console application.

//Упорядочивание массива по возрастанию методом пузырька

#include "stdafx.h" #include <iostream> using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{const int n=20;

int x[n]={19,20,1,2,3,5,4,7,6,18,8,17,9,11,10,12,14,13,16,15};

int i,f,m,t; printf("\n");

for (i=0;i<n;i++) printf(" %d ",x[i]); m = n;

do{

f=0; m--; for (i=0;i<m;i++)

if (x[i]>x[i+1])

{

// Перестановка t=x[i]; x[i]=x[i+1]; x[i+1]=t;

f=1;

}

}

while (f!=0); printf("\n");

for (i=0;i<n;i++) printf(" %d ",x[i]); return 0;

}

Пример. Сортировка методом пузырька массива объектов.

// Sortobjects.cpp :

//

#include "stdafx.h" #include <iostream> using namespace std;

class Cdrom{

 

int speed;

int year;

public:

Cdrom(int s,int y=2002){speed=s; year=y; cout<<"\nConstr-

1";}

Cdrom(){speed=32;year=1999;cout<<"\nConstr-2";} Cdrom(const Cdrom &

c){speed=c.speed;year=c.year;cout<<"\nConstr-3";} ~Cdrom(){cout<<"\nDestructor";}

void set_speed(int s){speed=s;} int get_speed()const{return speed;}

void set_year(int y){year=y;} int get_year()const{return year;}

const Cdrom & Sravnenie(const Cdrom &p) const {return (speed<p.speed) ? p : *this; }

};

int _tmain(int argc, _TCHAR* argv[])

{

const int n=10;

Cdrom x[n]={Cdrom(52,2005), Cdrom(42,2004),

Cdrom(54,2005),

Cdrom(40,2003),

Cdrom(58,2007),

Cdrom(52,2004),

Cdrom(62,2008),

Cdrom(20,2002),

Cdrom(16,2000),

Cdrom(12,1999)};

int i,f,m; Cdrom t; printf("\n");

for (i=0;i<n;i++) printf(" %d ",x[i].get_speed()); m = n;

do{

f=0; m--;

for (i=0;i<m;i++)

if (x[i].get_speed()>x[i+1].get_speed())

{

// Перестановка t=x[i]; x[i]=x[i+1]; x[i+1]=t;

f=1;

}

}

while (f!=0); printf("\n\n");

for (i=0;i<n;i++) printf(" %d ",x[i].get_speed()); printf("\n");

return 0;

}

Статические элементы класса

Переменная, которая является частью класса, но не является частью объекта этого класса, называется статическим членом. Существует ровно одна копия статического члена. Аналогично, функция, которой требуется доступ к членам класса, но не требуется, чтобы она вызывалась для конкретного объекта класса, называется статической функцией–членом (см. Б. Страуструп. Язык программирования C++. 3-е издание, стр. 274).

Для статических членов допускается оператор инициализации, причѐм только один,

int Cdrom::count=0;

Статическая функция не может объявляться как const, поскольку она, по определению, не работает с данными каждого объекта в отдельности, т. е. никак не выражено еѐ поведение относительно данных объекта, который осуществил вызов, если же указать const, то тем самым такое поведение будет определено.

Пример. В приведѐнном примере имеется статический член static int count; Для всех объектов класса существует только один экземпляр данных, объявленных как count.

#include <iostream> using namespace std; class Cdrom{

int speed;

int year;

static int

count;

public:

Cdrom(int s,int y=2002){speed=s;year=y;count++; cout<<"\nConstr-1";}

Cdrom(){speed=32;year=1999;count++;cout<<"\nConstr-2";} Cdrom(const Cdrom & c) {speed=c.speed;year=c.year;count++;cout<<"\nConstr-3";} ~Cdrom(){cout<<"\nDestructor";}

void set_speed(int s){speed=s;}

int get_speed() const {return speed;} void set_year(int y){year=y;}

int get_year() const {return year;} static int get_count() {return count;}

};

int Cdrom::count=0; int main()

{

Cdrom acer(52,2004); Cdrom nec(32,2001); Cdrom sony(24,1998);

cout<<"Vsego poluchili= "<<acer.get_count()<<endl; return 0;

}

Соседние файлы в папке техпрог