1. Классы ООП 1.Наследование 2.Инкапсуляция 3.Полиморфизм.

Презентация:



Advertisements
Похожие презентации
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
Advertisements

ООП Классы Данные отдельно, методы отдельно struct Node { Node* next; void* data; }; struct List { Node* first; int size; }; void* allocate() { … } void.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
2. Классы.Полиморфизм.. Перегрузка функций void f(); void f(int value); void f(doublevalue); void f(int value, int nextValue); … f(); f(12); f(12.0);
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Статические поля класса Статические поля хранят данные, общие для всех элементов класса. Статическое поле существует в единственном экземпляре для всех.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Объектно-ориентированное программирование Парадигма программирования, основанная на представлении предметной области в виде взаимосвязанных абстрактных.
Лекция 13 Производные классы и открытое наследование. Подбельский гл , Страуструп гл , Мейрс пп Открытое наследование производного.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
Наследование Полиморфизм ВЫЗОВ КОНСТРУКТОРОВ И ДЕСТРУКТОРОВ ПРИ НАСЛЕДОВАНИИ.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Лекция 10 Класс как абстрактный тип. Подбельский гл. 9, Страуструп гл. Конструкторы и деструктор Конструкторы - это специальные функции-члены класса, предназначенные.
1 Переопределение операций Макаревич Л. Г.. 2 Зачем нужна перегрузка операций? class Complex { double re; double im; public: Complex(double r=0, double.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Классы в С#. Перечисления С# Перечисление задает конечное множество возможных значений, которые могут получать объекты класса перечисление. [атрибуты][модификаторы]
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
Д.з. на 3 марта Язык С++ - занятие 51. Задача 4: top class stack { … int & top() { return stk[size -1 ]; } … }; // Пример вызова: stack s; … s.top() =
Транксрипт:

1. Классы

ООП 1.Наследование 2.Инкапсуляция 3.Полиморфизм

Классы. Базовый синтаксис struct A { }; class A { };

Спецификаторы доступа public, ptotected, private class A { public: // API of class void f(); protected: void f1(); private: void f2(); }; int main() { A a; a.f(); a.f1(); // запрещено a.f2(); // запрещено return 0; }

struct A { public: }; struct B : public A { }; class A { private: }; class B: private A { };

Конструктор class Point { public: Point(int x, int y) : mX(x), mY(y) { } private: int mX; int mY; }; … Point p1; // ошибка Point p2(1, 2);

Конструктор class Point { public: Point() : mX(0), mY(0) { } Point(int x, int y) : mX(x), mY(y) { } private: int mX; int mY; }; … Point p1; Point p2(1, 2);

class A { public: A() : mStr(NULL) { mStr = new char[20]; } ~A() { delete []mStr; } private: const char * mStr; }; … A a; A b(a); … Деструктор

Вызов деструктора. Объект на стеке class A { public: A(); ~A(); }; … { A a(); // вызов конструктора } // вызов деструктора

Вызов деструктора. Объект в куче class A { public: A(); ~A(); }; … { A * a = new A(); // вызов конструктора … delete a; // вызов деструктора }

class A { }; class A { public: A(); ~A(); A(const A &); A & operator=(); }; int main() { A a1; A a2(a1); A a3 = a1; a3 = a2; … } Автоматически сгенерированные функции класса

class A { public: A() : mStr(NULL) { mStr = new char[20]; } ~A() { delete []mStr; } private: const char * mStr; }; … A a; A b(a); …

class A { public: A() : mStr(NULL) { mStr = new char[20]; } ~A() { delete mStr; } private: A(const A &); A & operator=(A&); const char * mStr; }; … A a; A a1; A b(a); // build error a1 = a; // build error …

Список инициализации. Порядок инициализации. class A { public: A(); private: int mCounter; int mSize; }; … A::A() : mCounter(0), mSize(0) { } ИЛИ A::A() { mCounter = 0; mSize = 0; }

Список инициализации. Порядок инициализации. class A { public: A(); private: int mCounter; // 1 int mSize; // 2 }; … A::A() : mCounter(0), mSize(0) { } ИЛИ A::A() { mCounter = 0; mSize = 0; }

Список инициализации. Порядок инициализации. class A { public: A(); private: int mCounter; // 1 int mSize; // 2 }; … A::A() : mSize(0), mCounter(mSize) { }

Ключевое слово explicit class A { public: A(int num); }; … A a = 5; // вызов A(int num); … class A { public: explicit A(int num); }; … A a = 5; // ошибка A a(5); … a + 10; // ошибка

Ключевое слово const … const int I = 0; const A a(5); … i = 12; // ошибка … if (i=12) … if (12 == i) class A { public: A(int size) : mSize(size) { } int fun(); int getSize() const; private: const int mSize; }; const A a(2); a.fun(); // ошибка a.fun1();

Ключевое слово const 1. const char * str; 2. char * const str; 3. const char * const str; 4. char const * const str;

Ключевое слово const 1. const char * str; 2. char * const str; 3. const char * const str; 4.char const * const str; const * constData; * const constPointer;

Ключевое слово mutable class A { public: const char * toString() const; private: mutable const char * mCachedString; mutable bool mIsValueCached; }; const char * A::toString() const { if (! mIsValueCached) { …. // cache new value mIsValueCached = true; } return mCachedString; }

Перечисления enum DEFINE STATUS_OK 0 DEFINE STATUS_ERROR -1 DEFINE STATUS_BUSY 2 … int openConnection(….); … switch(openConnection(…)) { case STATUS_OK: … case STATUS_ERROR : … case STATUS_BUSY : … } enum Status { STATUS_OK = 0, STATUS_ERROR, STATUS_BUSY }; … Status openConnection(….); … switch(openConnection(…)) { case STATUS_OK: … case STATUS_ERROR : … case STATUS_BUSY : … }

Перечисления enum enum Status { STATUS_OK = 10, STATUS_ERROR = 12, STATUS_BUSY = 42 }; … Status status = STATUS_OK ; class Connection { public: enum Status { STATUS_OK = 10, STATUS_ERROR = 12, STATUS_BUSY = 42 }; … Connection::Status status = Connection::STATUS_OK ;

Перечисления enum class Connection { public: enum Status { MODE_DEFAULT = 0, MODE_USE_SSL= 1, MODE_RECONNECT_ENABLE = 2 }; Connection(const char *host, MODE mode) }; … Connection connection(Connection::MODE_USE_SSL | MODE_RECONNECT_ENABLE ); …

Константы в C++ #define DEFAULT_SIZE 12 #define DEFAULT_NAME any_name … int a = DEFAULT_SIZE ; const char * name = DEFAULT_NAME ; const int DEFAULT_SIZE =12; const char * const DEFAULT_NAME = any_name; … int a = DEFAULT_SIZE ; const char * name = DEFAULT_NAME ;

Константы в C++ enum EDefaultOptions { Timeout = 20, /// msec DefaultHTTPPort = 80 }; File: Connection.h: class Connection { Private: static const int RetryTimeout = 100; }; File: Connection.cpp … const int Connection::RetryTimeout ;

Литература