Введение в C++

advertisement
Лекция 3. Введение в C++
Примеры взяты из книги
Брюса Эккеля “Думаем на С++”
Несколько отличий от C

int f();

C: функция с произвольным числом аргументов

C++: функция без аргументов

Булев тип bool (true/false)

#include <header> vs. #include <header.h>

Ссылка – указатель по-новому

<Type> & <Name> void square(int x, int& result) {
result = x * x;
}
…
int i = 0;
square( 3, i);
Cin и Cout
#include <iostream>
using namespace std;
int main() {
int num;
cout << "Enter a number: ";
cin >> num;
cout << num << “^2 = ” << num*num;
}
Зачем нужно ООП?


“Computers are bicycles for the mind.” - S. Jobs
Уровни абстрагирования от машинного
языка

Ассемблер


Императивные языки (Fortran, C, BASIC, ...)


Запись машинных команд в удобном для человека
виде
Логика программы всё ещё строится в терминах
машины
ООП (Smalltalk, C++, ...)

Предоставление возможности описывать задачу в её
же терминах
Объект и его интерфейс

Объект – некоторая сущность, обладающая
состоянием(т.е. свойствами, задаваемыми
атрибутами) и поведением(т.е. операциями
над свойствами, или методами)
Простейший пример класса в С++
struct A {
int i;
char j;
float f;
void func(){
cout << “hello!” << endl;
}
};
Сокрытие реализации.
Инкапсуляция.

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 <iostream>
using namespace std;
int x = 100;
class WithStatic {
static int x;
static int y;
public:
void print() {
cout << "WithStatic::x = " << x << endl;
cout << "WithStatic::y = " << y << endl;
}
};
int WithStatic::x = 1;
int WithStatic::y = x + 1;
// WithStatic::x NOT ::x
int main() {
WithStatic ws;
ws.print();
} ///:~
Пространства имён


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 <exception>
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, 3.1415)
Пара слов о куче(heap) и
стеке(stack)
Код
Статические данные
Куча
(Свободная память)
Запись активации f2(), вызованной из f1()
Запись активации f1(), вызванной из main()
Запись активации main()
}
Стек
Каждая запись активации среди прочего содержит параметры,
переданные функции,и её локальные данные.
Спасибо за внимание.
Вопросы?
Download