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

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

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

Материалы к лекции 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;

}

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