Lush Green

Подобни документи
Виртуални функции

Lush Green

Предефиниране на оператори. Копиращ конструктор. Оператор за присвояване Любомир Чорбаджиев Технологическо училище Електронни системи Технически униве

Програмиране на Паскал

Динамична памет. Конструктори и деструктори Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

C++

2. Наследяване в C++ Съдържание Съдържание Наследяване (Rev: 1.2) Любомир Чорбаджиев 1 1 февруари 2007 г. 1 Наследяване 1 2

Класове в C++ (Rev: 742) Любомир Чорбаджиев 1 20 октомври 2006 г. Съдържание Съдържание 1 Обектно-ориентирано програмиране 1

Дефиниране на шаблон Шаблони (Templates) Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София

Канонична форма на клас или 4 (голямата четворка) Трифон Трифонов Обектно-ориентирано програмиране, спец. Компютърни науки, 1 поток, спец. Софтуерно и

Динамична памет Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. Тр

4

Структура на програма в C - Част 7 - масиви, оператор за индексиране, sizeof оператор

Структура на програма в C - Част 6 - goto, switch, break и continue клаузи

Указатели. Маисиви, указатели, параметри на функции Калин Георгиев 21 декември 2016 г. Калин Георгиев Увод в програмирането 21 декември 2016 г. 1 / 23

Синтаксис за дефиниране на функции Трифон Трифонов Функционално програмиране, спец. Информатика, 2015/16 г. 6 януари 2016 г. Трифон Трифонов (ФП-И 15/

3. Синтактичен анализ. Граматика на учебен програмен език STUDENT. Извеждане на изречения от правилата на граматиката Цел на упражнението Упражнението

МИНИСТЕРСТВО НА ОБРАЗОВАНИЕТО И НАУКАТА

Обработка на грешки Изключения Любомир Чорбаджиев Технологическо училище Електронни системи Технически университет, София Re

Рекурсия Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 21 декември 2016 г. 4 януари

ИНТЕРНЕТ ПРОГРАМИРАНЕ - JAVA JAVA ОБЕКТИ Ненко Табаков Пламен Танов Технологическо училище Електронни системи Технически университет София 9 октомври

При изпълнението на програма се извършват определени действия над данните, дефинирани в програмата.тези данни могат да бъдат постоянни ( константи ) и

В тази част, ще разгледаме аритметичните и логически операции, както, и включването им в изрази. В следващата таблица са дадени всички възможни операц

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, спец. Софтуерно инженерство, 2016/17 г. 9 ноември 2016 г. Триф

Проф

Slide 1

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г ноември 2018 г. Трифон Трифонов (УП 18/19) Ма

Black and White

Масиви и низове Трифон Трифонов Увод в програмирането, спец. Компютърни науки, 1 поток, 2018/19 г. 15 ноември 6 декември 2018 г. Трифон Трифонов (УП 1

Лекции по Програмиране първа част I. Въведение в компютрите и програмирането КОМПЮТЪР = АПАРАТУРА + ПРОГРАМНО ОСИГУРЯВАНЕ Апаратна част Hardware(Харду

-

Програмен език C Пламен Танов Ненко Табаков Мартин Вачовски Технологично училище Електронни системи Технически университет София версия 0.5

036-B.dvi

2. Лексически анализ. Основни понятия и алгоритъм на лексическия анализ. Програмна структура на лексическия анализатор Цел на упражнението Упражнениет

Анализ и оптимизация на софтуерни приложения

Лабораторно упражнение 6 Тема: Оператори за цикли в езика C++. Реализиране на циклични алгоритми I. Цел на лабораторното упражнение Да се затвърдят зн

Маисви

Структура на програма в C - Част 2 - типове, функции

Microsoft Word - VM22 SEC55.doc

1. Инструментални средства на изкуствения интелект. Основната характеристика на програмните системи, базирани на знания, отличаваща ги от стандартните

ПРОГРАМНО ОСИГУРЯВАНЕ НА КОМПЮТЪРА

Сериализация Калин Георгиев 13 май 2016 г. Калин Георгиев Обектно ориентирано програмиране 13 май 2016 г. 1 / 23

КОНСПЕКТ ЗА ДЪРЖАВЕН ИЗПИТ

Анализ и оптимизация на софтуерни приложения

Препис:

Класове

Какво са класовете? Основен инструмент на ООП Средство за дефиниране на абстрактни типове данни Синтактична конструкция, която позволява логическо групиране на данни и операциите над тях

Дефиниция на клас Декларации на член-данни (полета) Декларации на член-функции (методи) конструктори селектори мутатори деструктор

Дефиниция на клас <клас> ::= class <име_на_клас> { <тяло> }; <име_на_клас> често е съществително име с главна буква <тяло> ::= { <декларация>; } <декларация> ::= <член-данна> <конструктор> <мутатор> <селектор> <деструктор> <член-данна> ::= [<достъп>:] <тип> <име> {, <име>} <конструктор> ::= [<достъп>:] <име_на_клас>(<параметри>) <мутатор> ::= [<достъп>:] <тип> <име>(<параметри>) <селектор> ::= [<достъп>:] <тип> <име> (<параметри>) const <деструктор> ::= [<достъп>:] ~<име_на_клас>() <достъп> ::= private protected public

Дефиниция на клас Може да присъства само един път в даден файл Обикновено се пише в заглавен (header) файл с разширение.h Файловете, които използват класа, включват дефиницията му чрез включване на заглавния файл с #include class Rational { private: int numer, denom; public: Rational(); int getnumerator() const; void read(); };

Дефиниция на клас Конструкторите и деструкторите нямат тип! Деструкторът няма параметри! Прието е член-данни и член-функции да са разделени Директната рекурсията е забранена, както при записи class Employee { Employee boss;... }; Индиректната рекурсия (чрез указател) е позволена class Employee { Employee* boss;... }; Член-данните не може да са от тип псевдоним! Член-функциите могат да са от всякакъв тип, включително и същия клас: class Employee {... Employee getboss() const; };

Обекти Променливите от тип някой клас се наричат обекти или инстанции на класа <дефиниция_на_обект> ::= ( <име_на_клас> <клас> ) <описание_на_обект> {, <описание_на_обект> }; <описание на обект> ::= <име_на_обект> [ = <израз> ] <име_на_обект>(<параметри>) <име_на_обект> = <име_на_клас>(<параметри>)

Представяне на обекти в паметта поле 1 поле 2 поле 3 поле 4 всеки обект от даден клас заема едно и също количество памет sizeof(<клас>) или sizeof(<обект>) връщат броя байтове, заемани от обекта от дадения клас

Представяне на класове в паметта... Rational Rational::Rational() Rational::getNumerator() Rational::read().........

Достъп до компонента на обект <обект>.<член-данна> <обект>.<член-функция>(<параметри>) Всеки обект има собствени стойности на член-данните Кодът на функциите се пази в класа, а не във всеки обект!

Достъп до компонента чрез указател към обект (*<указател_към_обект>.)<член-данна> (*<указател_към_обект>.)<член-функция>(<параметри>) <указател_към_обект>-><член-данна> <указател_към_обект>-><член-функция>(<параметри>) С указатели към обекти се работи както с указатели към обикновени променливи

Указател this В член-функциите имаме достъп до компонентите без да се указва обект Използва се обекта, за който е извикана член-функцията Как член-функциите разбират за кой обект са извикани? При всяко извикване на член-функция се създава автоматично константен указател <име_на_клас> * const this this винаги сочи към обекта, за който е извикана член-функцията За селекторите: <име_на_клас> const * const this

this като неявен параметър void Rational::read() { cin >> numer >> denom; }... се превежда до void Rational::read(Rational* const this) { cin >> this->numer >> this->denom; } r.read();... се превежда до Rational::read(&r);

this като неявен параметър int Rational::getNumerator() const { return numer; }... се превежда до int Rational::getNumerator(Rational const * const this) { return this->numer; } cout << r.getnumerator();... се превежда до cout << Rational::getNumerator(&r);

Спецификатори за достъп Две нива на достъп: вътрешен достъп Достъп до компоненти на класа от член-функции на същия клас външен достъп Достъп до компоненти на класа от функции, които не са член-функции на същия клас обикновени функции член-функции на друг клас

Спецификатори за достъп Спецификатори за достъп private позволен е само вътрешен достъп public позволен е вътрешен и външен достъп protected позволен е вътрешен достъп и ограничен външен достъп ще говорим за protected по-късно спецификатор по подразбиране е private в struct е public

Спецификатори за достъп След първото използване на спецификатор за достъп, той остава валиден за всички последващи декларации Спецификатор за достъп може да бъде използван произволен брой пъти class Example { int a; // private double b; //private public: Example(); // public int geta() const; // public private: void setb(double b); // private };

Операция за указване на област [<област>]::<име> <област> е запис, клас или пространство от имена Ако <област> е пропусната, се подразбира глобалното пространство от имена Име с използвана операция :: се нарича квалифицирано име

Примери: Операция за указване на област Rational::read член-функцията read на класа Rational Student::read член-функцията read на класа Student ::read глобалната функция read Операцията :: се използва, когато има нужда да се разреши двусмислица (ambiguity)

Дефиниция на член-функция <член_функция> ::= [inline] [<тип>] <име_на_клас>::<име_на_член_функция> (<параметри>) { <тяло> } Прието е член-функциите да се дефинират в изходния (source) файл, а не в заглавния (header) файл Защо? Който използва класа ви трябва да знае кои са член-данните и какви член-функции има, но не и как са реализирани

Вградени (inline) член-функции Позволено е член-функциите да се дефинират в дефиницията на класа class Rational {... Rational() { numer = 0; denom = 1; } }; Такива функции се наричат вградени Вградените функции не се извикват със стекови рамки Тяхното тяло се замества при всяко тяхно извикване Една вградена функция може да е дефинирана извън декларацията на класа Преди дефиницията се поставя запазената дума inline Окончателното решение дали една функция да е вградена е на компилатора! Препоръчително е да се вграждат само кратки функции

Област (scope) на класовете Глобално ниво Областта на класа е от дефиницията му до края на файла, в който е дефиниран Локално ниво дефиниция във функция (локален клас) Областта на класа е от дефиницията му до края на функцията, в който е дефиниран дефиниция в друг клас (вложен клас) Областта на класа е от дефиницията му до края на класа, в който е дефиниран

Локални класове Особености на локалното ниво могат да извикват рекурсивно функцията, в която са дефинирани могат да използват статичните променливи, дефинирани в тази функция класът и обектите му не са видими извън функциите Вложени класове не могат да използват член-данните на обвиващия клас достъпът до компонентите на обвиващия клас е вътрешен за дефиниране на член-функции на вложени класове се използват няколко последователни операции за указване на област OuterClass::InnerClass::function() {... }

Примери за дефиниране на клас Точка в равнината Точка в пространството Пирамида