Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 1. namespace - пространство имен. Помогает избегать конфликтов имен в разных частях программы.
- namespace Clock {
- double time;
- }
- namespace SomeOther {
- double time;
- }
- ...
- print(Clock::time);
- print(SomeOther::time)
- 2. class - почти то же самое, что и struct. Классы (и структуры) в C++ могут иметь методы (функции для работы с этим классом):
- class Time {
- double seconds;
- void print_seconds() {
- print(seconds);
- }
- }
- ...
- Time t;
- t.seconds = 5;
- t.print_seconds();
- Экземпляр класса называется объект. (в примере Time - это класс, а t - это объект).
- 3. template - шаблон. Позволяет подставлять в функцию или класс произвольный тип:
- template <typename T>
- class Array { ... }; // массив какого-то типа, шаблонный класс
- Array<int> intArr; // массив целых чисел
- typedef Array<float> FloatArray; // объявление конкретного типа на основе шаблона (можно так и не делать)
- FloatArray dblArr; // массив чисел с плав точкой
- 4. Можно перегружать операторы:
- class Point {
- ...
- Point operator- () {...} // перегрузка оператора как члена класса
- };
- Point operator+ (Point a, Point b) {...}
- После этого можно написать:
- Point p;
- Point q = -p; // используется operator-
- Point zero = p + q; // используется operator+
- 5. Ссылки - почти то же самое, что указатели, но синтаксис записи по работе с ними - как с обычными объектами.
- struct Point { double x, y; }
- void f(Point & q)
- {
- q.x = 5;
- }
- Point p;
- f(p); // изменится именно p, потому что внутри ссылки спрятан указатель
- То есть ссылка - это чисто упрощение записи для указателей.
- 6. Константные переменные. Если переменная объявлена со словом const - то ее нельзя менять:
- const int i = 5;
- i = 10; // ОШИБКА
- void g(const Point & q)
- {
- g.x = 10; // ОШИБКА, ср. с примером из предыдущего пункта
- }
- Также можно явно указать в методе класса, что он не будет менять члены класса (это предотвращает ошибки и облегчает чтение программы):
- class Point
- {
- int x;
- void print() const {// const после имени метода
- print(x); // так можно
- x = 10; // а так нельзя
- }
- };
- 7. Модификаторы доступа - способ инкапсуляции (то есть сокрытия деталей реализации). Некоторые члены класса можно спрятать от пользователей класса и сделать доступными только методам класса или его наследников (см. дальше):
- class C {
- public:
- int i;
- private:
- int j;
- };
- C c;
- print(c.i); // можно
- print(c.j); // ОШИБКА
- 8. Наследование - способ расширения базового класса (добавления функциональности):
- class Fruit {
- void eat() { съесть фрукт }
- void drop() { выбросить; }
- };
- class Banana : public Fruit { // Банан наследуется от фрукта
- void peel() { очистить шкурку; }
- void eat() {
- peel(); // очистить...
- Fruit::eat(); // ...и съесть, как обычный фрукт
- }
- }
- Banana b;
- b.peel();
- b.eat();
- b.drop();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement