
техпрог / Comp-Sci-06
.pdf
Материалы к лекции 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;
}