Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.12 KB | None | 0 0
  1. 1. namespace - пространство имен. Помогает избегать конфликтов имен в разных частях программы.
  2.  
  3.     namespace Clock {
  4.         double time;
  5.     }
  6.     namespace SomeOther {
  7.         double time;
  8.     }
  9.     ...
  10.     print(Clock::time);
  11.     print(SomeOther::time)
  12.    
  13. 2. class - почти то же самое, что и struct. Классы (и структуры) в C++ могут иметь методы (функции для работы с этим классом):
  14.     class Time {
  15.         double seconds;
  16.        
  17.         void print_seconds() {
  18.             print(seconds);
  19.         }
  20.     }
  21.     ...
  22.     Time t;
  23.     t.seconds = 5;
  24.     t.print_seconds();
  25.    
  26. Экземпляр класса называется объект. (в примере Time - это класс, а t - это объект).
  27.  
  28. 3. template - шаблон. Позволяет подставлять в функцию или класс произвольный тип:
  29.  
  30.     template <typename T>
  31.     class Array { ... }; // массив какого-то типа, шаблонный класс
  32.    
  33.     Array<int> intArr; // массив целых чисел
  34.    
  35.     typedef Array<float> FloatArray; // объявление конкретного типа на основе шаблона (можно так и не делать)
  36.     FloatArray dblArr; // массив чисел с плав точкой
  37.    
  38. 4. Можно перегружать операторы:
  39.     class Point {
  40.         ...
  41.         Point operator- () {...} // перегрузка оператора как члена класса
  42.     };
  43.     Point operator+ (Point a, Point b) {...}
  44.    
  45. После этого можно написать:
  46.     Point p;
  47.     Point q = -p; // используется operator-
  48.     Point zero = p + q; // используется operator+
  49.    
  50. 5. Ссылки - почти то же самое, что указатели, но синтаксис записи по работе с ними - как с обычными объектами.
  51.  
  52.     struct Point { double x, y; }
  53.    
  54.     void f(Point & q)
  55.     {
  56.         q.x = 5;
  57.     }
  58.    
  59.     Point p;
  60.     f(p); // изменится именно p, потому что внутри ссылки спрятан указатель
  61. То есть ссылка - это чисто упрощение записи для указателей.
  62.  
  63. 6. Константные переменные. Если переменная объявлена со словом const - то ее нельзя менять:
  64.    
  65.     const int i = 5;
  66.     i = 10; // ОШИБКА
  67.    
  68.     void g(const Point & q)
  69.     {
  70.         g.x = 10; // ОШИБКА, ср. с примером из предыдущего пункта
  71.     }
  72.    
  73. Также можно явно указать в методе класса, что он не будет менять члены класса (это предотвращает ошибки и облегчает чтение программы):
  74.  
  75.     class Point
  76.     {
  77.         int x;
  78.        
  79.         void print() const {// const после имени метода
  80.             print(x); // так можно
  81.             x = 10; // а так нельзя
  82.         }
  83.     };
  84.    
  85. 7. Модификаторы доступа - способ инкапсуляции (то есть сокрытия деталей реализации). Некоторые члены класса можно спрятать от пользователей класса и сделать доступными только методам класса или его наследников (см. дальше):
  86.  
  87.     class C {
  88.         public:
  89.             int i;
  90.         private:
  91.             int j;
  92.     };
  93.    
  94.     C c;
  95.     print(c.i); // можно
  96.     print(c.j); // ОШИБКА
  97.    
  98. 8. Наследование - способ расширения базового класса (добавления функциональности):
  99.  
  100.     class Fruit {
  101.         void eat() { съесть фрукт }
  102.         void drop() { выбросить; }
  103.     };
  104.    
  105.     class Banana : public Fruit { // Банан наследуется от фрукта
  106.         void peel() { очистить шкурку; }
  107.        
  108.         void eat() {
  109.             peel(); // очистить...
  110.             Fruit::eat(); // ...и съесть, как обычный фрукт
  111.         }
  112.     }
  113.    
  114.     Banana b;
  115.     b.peel();
  116.     b.eat();
  117.     b.drop();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement