Лекция 3. Введение в C++ Примеры взяты из книги Брюса Эккеля Думаем на С++

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



Advertisements
Похожие презентации
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Advertisements

Преобразования типов В языке C/C++ имеется несколько операций преобразования типов. Они используются в случае, если переменная одного типа должна рассматриваться.
Основы информатики Классы Заикин Олег Сергеевич zaikin.all24.org
Информационные технологии Стандартные библиотечные функции манипулирование данными преобразование и шифрование определение пользователями функций.
Лекция 10 ОбъектыЛекция 10 ОбъектыООП Инкапсуляция Возможность совместного хранения данных и кода для их обработки Наследование Возможность расширять существующие.
НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.НГТУ, каф. ВТ Наследование в С++ Макаревич Л. Г.
Д.з Язык С++ - занятие 31. Задача 1: 1/1 + 1/3 + 1/5 … #include using namespace std; int main() { int n; cin >> n; double sum = 0;// Сумма for.
Наследование Наследование – это отношение является между классами. class Person { string first_name; int birth_year;... } class Student : Person { float.
Лекция 4. Введение в С++ Наследование, множественное наследование. Конструкторы, деструкторы. Виртуальные функции.
Объектно-ориентированное программирование С++. Лекция 6 Карпов В.Э.
Лекция 9. Введение в ООП. Часть 2 Красс Александр СПбГУ ИТМО, 2008.
Дружественные функции Дружественные функции – это функции, объявленные вне класса, но имеющие доступ к закрытым и защищенным полям данного класса Дружественная.
Лекция 11. Введение в ООП. Часть 4 Красс Александр СПбГУ ИТМО, 2008.
Лекция 8. Введение в ООП. Часть 1 Красс Александр СПбГУ ИТМО, 2008.
EPAM Systemswww.epam.com EPAM Systemswww.epam.com Программирование на языке C# Основы ООП.
Язык C++ Лекция 2. Недостатки enumов Засорение namespaceа, в котором находится enum Соответственно, члены enumа должны иметь уникальный префикс.
Лекция 8 Область видимости Время жизни. Область видимости Область видимости – характеристика именованного объекта Область видимости - часть текста программы,
Перегрузка операторов x = a + b результат 1-й операнд2-й операнд оператор По количеству операндов операторы делятся на: унарные (один операнд) бинарные.
Функции Функция – именованная последовательность описаний и операторов, выполняющая некоторое действие. Может иметь параметры и возвращать значение. Функция.
ЛЕКЦИЯ 7 КЛАССЫ ПАМЯТИ И ОБЛАСТЬ ДЕЙСТВИЯ ОБЪЕКТОВ.
Транксрипт:

Лекция 3. Введение в C++ Примеры взяты из книги Брюса Эккеля Думаем на С++

Несколько отличий от C int f(); C: функция с произвольным числом аргументов C++: функция без аргументов Булев тип bool (true/false) #include vs. #include Ссылка – указатель по-новому & void square(int x, int& result) { result = x * x; } … int i = 0; square( 3, i);

Cin и Cout #include using namespace std; int main() { int num; cout > num; cout

Зачем нужно ООП? Computers are bicycles for the mind. - S. Jobs Уровни абстрагирования от машинного языка Ассемблер Запись машинных команд в удобном для человека виде Императивные языки (Fortran, C, BASIC,...) Логика программы всё ещё строится в терминах машины ООП (Smalltalk, C++,...) Предоставление возможности описывать задачу в её же терминах

5 принципов Smalltalk Everything is an object. Объект – улучшенная переменная, позволяющая хранить данные и проводить над ними действия A program is a bunch of objects telling each other what to do by sending messages. Each object has its own memory made up of other objects. Every object has a type. класс = тип Объект может принадлежать сразу к нескольким типам All objects of a particular type can receive the same messages.

Объект и его интерфейс Объект – некоторая сущность, обладающая состоянием(т.е. свойствами, задаваемыми атрибутами) и поведением(т.е. операциями над свойствами, или методами)

Простейший пример класса в С++ struct A { int i; char j; float f; void func(){ cout

Сокрытие реализации. Инкапсуляция. 2 типа программистов Создатели классов Программисты-клиенты (пользователи готовых классов) Контроль доступа Руки прочь от того, что не надо трогать Возможность создания неизменного внешнего интерфейса (например, в библиотеке) Инкапсуляция – сокрытие реализации и внутренней структуры объекта от пользователя.

Public, Protected, Private Public - доступен всем (как struct в C), область по умолчанию для struct Protected – доступ может осуществляться только функцией-членом Private – элементы доступны из класса и его потомков, область по умолчанию для class

Public, Protected, Private - пример struct B { protected: char j; float f; public: int i; void func(); }; void B::func() { i = 0; j = '0'; f = 0.0; }; int main() { B b; b.i = 1; // OK, public //! b.j = '1'; // Illegal, private //! b.f = 1.0; // Illegal, private } ///:~

Статические поля и методы Статический член класса – единый на все объекты //: C10:Statinit.cpp // Scope of static initializer #include using namespace std; int x = 100; class WithStatic { static int x; static int y; public: void print() { cout

Пространства имён C: глобальное пространство имён + пространство имён внутри функции (+ {}) C++: возмость задания пространств имён Namespace Директива using namespace namespace X { class Y { static int i;} } int X::Y::i = 9; using namespace X; Y::i = 0;

Переиспользование классов. Создание объекта – члена класса.

Переиспользование классов. Наследование. Создание нового класса путём добавления новых свойств к уже существующему

Переиспользование классов. Наследование. Виртуальные функции: Хочу, чтобы старая интерфейсная функция делала что-то другое для моего нового типа

Ранняя и поздняя линковка. Полиморфизм. Полиморфизм – способность объекта одного типа использоваться как другой тип. Во время компиляции компилятор C++ может ещё не знать, какую именно функцию вызывать!

Немного об обработке исключений С: setjmp/longjmp C++: try/catch #include int main() { try { // do something (might throw an exception) } catch (const std::exception& e) { // handle exception e } catch (...) { // unknown exception, should not happen }

Аргументы по умолчанию void f(int x, int = 0, float = 1.1);... void f(int x, int, float flt) { /*... */ } … f(1234); f(1, 1); f(-100, 10, )

Пара слов о куче(heap) и стеке(stack) Код Статические данные Куча (Свободная память) Запись активации f2(), вызованной из f1() Запись активации f1(), вызванной из main() Запись активации main() } Стек Каждая запись активации среди прочего содержит параметры, переданные функции,и её локальные данные.

Спасибо за внимание. Вопросы?