
техпрог / Comp-Sci-01
.pdf
Материалы к лекции 1.
Объектно-ориентированное программирование
Структуры, Классы, Объекты, инкапсуляция.
1. Пример структуры.
#include <iostream> using namespace std; struct Cdrom{
int speed;//скорость int year;// год выпуска
};
int main()
{
Cdrom acer; acer.speed =40;
acer.year=2006;//доступ к элементам структуры
Cdrom *lg=new Cdrom;
lg->speed=48; //два способа доступа к элементам структуры
(*lg).year=2007;
cout<<"\nCd-Rom Acer "<<acer.speed<<"god vypuska"<<acer.year;
cout<<"\nCd-Rom LG "<<(*lg).speed<<" god vypuska "<<lg- >year;
return 0;
}
Структура – тип данных, определяемый пользователем.
struct Cdrom{
int speed;//скорость int year;// год выпуска
};
2.Пример. В этом примере для доступа к полям структуры используются функции–члены (методы), но можем использовать также непосредственный доступ, как это сделано в предыдущем примере.
#include <iostream> using namespace std; struct Cdrom{
int speed;//скорость int year;// год выпуска
void set_speed(int s){speed=s;} int get_speed(){return speed;} void set_year(int y){year=y;} int get_year(){return year;}
};
int main()

{Cdrom acer;
acer.set_speed(40); acer.set_year(2006);//доступ к элементам
структуры
Cdrom *lg=new Cdrom; lg->set_speed(48); (*lg).set_year(2007);
cout<<"\nCd-Rom Acer "<<acer.get_speed(); cout<<" god vypuska "<<acer.get_year(); cout<<"\nCd-Rom LG "<<(*lg).get_speed(); cout<<" god vypuska "<<lg->get_year();
return 0;
}
3.Пример. Доступ к полям возможен только с помощью методов, непосредственное обращение к полям, например, acer.speed приведѐт к ошибке.
#include <iostream> using namespace std; struct Cdrom{ private:
int speed;//скорость int year;// год выпуска
public:
void set_speed(int s){speed=s;} int get_speed(){return speed;} void set_year(int y){year=y;} int get_year(){return year;}
};
int main()
{Cdrom acer; //acer.speed=52; - Error!!!! acer.set_speed(40); acer.set_year(2006);
cout<<"\nCd-Rom Acer "<<acer.get_speed(); cout<<" god vypuska "<<acer.get_year(); return 0;
}
4.Пример. В классе объединены данные и функции управления этими данными. Для определения класса используются ключевые слова class и struct, задающие разные правила умолчания. В struct по умолчанию используется доступ public, а в class – доступ private. Размещение данных в разделе private называют сокрытием данных и является частным случаем инкапсуляции. Эту защиту можно обойти путѐм явного преобразования типа или операциями с указателями, но, как замечено в книге Б. Страуструпа “Язык программирования C++”, это уже жульничество.
#include <iostream> using namespace std; class Cdrom{

int speed;//скорость int year;// год выпуска
public:
void set_speed(int s){speed=s;} int get_speed(){return speed;} void set_year(int y){year=y;} int get_year(){return year;}
};
int main()
{Cdrom acer;
acer.set_speed(40); acer.set_year(2006);//доступ к элементам
структуры
Cdrom *lg=new Cdrom; lg->set_speed(42); (*lg).set_year(2007);
cout<<"\nCd-Rom Acer "<<acer.get_speed(); cout<<" god vypuska "<<acer.get_year(); cout<<"\nCd-Rom LG "<<(*lg).get_speed(); cout<<" god vypuska "<<lg->get_year(); return 0;
}
5. Пример. Реализация функций-членов вне класса.
#include <iostream> using namespace std; class Cdrom{
int speed;//скорость int year;// год выпуска
public:
void set_speed(int s); int get_speed();
void set_year(int y); int get_year();
};
void Cdrom::set_speed(int s)
{
if ((s>0) &&(s<100)) speed=s; else speed=1;
}
inline int Cdrom::get_speed() { return speed;
}
void Cdrom::set_year(int y)
{
if ((y>1995) && (y<2012))year=y; else y=2000;
}
int Cdrom::get_year(){ return year;
}
int main()

{Cdrom acer;
acer.set_speed(40); acer.set_year(2006); cout<<"\nCd-Rom Acer "<<acer.get_speed();
cout<<" god vypuska "<<acer.get_year(); return 0;
}