ь, достаточно для размещения одного про єкта типом Т; после Завершення виклику оператора, компілятор Здійснює ініціалізацію об'єкта (віклікаючі его конструктор, если такий БУВ визначний) i Повертає вказівнік типом Т *.
б) new T [n] віділяє пам ять, достаточно для размещения n про єктів типом Т; после Завершення виклику оператора, компілятор Здійснює ініціалізацію шкірного з n об'єктів и Повертає вказівнік типом Т *.
в) delete p - звільняє пам ять, на якові посілається вказівнік p, віділену для него Ранее операцією new T. Деініціалізація про єкта (віклікаючі деструктора) забезпечується компілятором ще до виклику оператора delete.
г) delete [] p - звільняє область пам'яті, віділену для цього масиву Ранее операцією new T [n]. Деініціалізація шкірного Елемент масиву забезпечується компілятором ще до виклику оператора.
Як видно, однією з принципова відмінностей Операторів new та delete від своих попередніків, malloc и free, є обов язковість ініціалізації про єктів, пам ять під Які Було Призначено. Іншою відмінністю є ті, что загальна реалізація (тобто определена за умовчанням) оператора new НЕ Повертає нульові ВАРТІСТЬ вказівніка в випадка помилки призначення пам яті (например з причини ее шлюбу). Натомість, new кідає віняток (например, std :: bad_alloc в ситуации шлюбу пам яті). Так само як и для free, если вартістю аргументу оператора delete є 0, ані звільнення пам яті, ані деініціація НЕ відбувається (при тому, подібна ситуация НЕ вважається помилковості).
Функції могут прійматі аргументи за Ваші відповіді. Например, функція void f (int amp; x) {x=3;} прісвоює своєму аргументу значення 3. Функції такоже могут повертаті результат за Ваші відповіді, и ПОСИЛАННЯ могут буті поза всяким зв язком з функціямі. Например, {double amp; b=a [3]; b=sin (b);} еквівалентно а [3]=sin (а ??[3]) ;. Ваші відповіді Певнев мірою схожі з вказівнікамі, з такими особливую: при опісі ПОСИЛАННЯ ініціалізуваліся вказівкою на існуюче значення даного типу; ПОСИЛАННЯ довічно указує на одну и ту ж адресою; при зверненні до ПОСИЛАННЯ операція читання пам яті за адресою ПОСИЛАННЯ проводитися автоматично. На Відміну Від вказівніків, ПОСИЛАННЯ НЕ может буті константностей самє по Собі, однак может посілатіся на константностей об'єкт. Например, int const amp; const ref=a [3]; На Відміну Від int const * const ref= amp; a [3];- Є некоректно, з точки зору С ++, вирази; в свою черго, и int const amp; ref=a [3] ;, и int const * ref= amp; a [3];- Є Цілком Прийнятних.
можут буті декілька функцій з одним и тім же ім'ям, но різнімі типами або кількістю аргументів (перевантаження функцій; при цьом тип значення, что возвращается, на перевантаження НЕ впліває). Например, Цілком можна писати:
void Print (int x); Print (double x); Print (int x, int y);
Один або декілька останніх аргументів Функції могут задаватіся за умовчанням. Например, если функція описана як void f (int x, int y=5, int z=10), Виклики f (1), f (1,5) i f (1,5,10) еквівалентні.
При опісі функцій відсутність аргументів в дужках означає, На Відміну Від Сі, что аргументів немає, а не ті, что смороду невідомі. Если аргументи невідомі, треба користуватись багатокрапкою, например int printf (const char * fmt ...). Тип Першого аргументу винен буті завдань.
Можна опісуваті оператори над новімі типами. Например, так:
struct Date {int day, month, year;}; operator ++ (struct Date amp; date);
Оператори нічім НЕ відрізняються від (других) функцій. Нельзя опісуваті оператори над зумовленімі типами (скажімо, перевізначаті множення чисел); нельзя вігадуваті Нові операции, якіх немає в Сі ++ (скажімо **); арність (Кількість параметрів) i ПРІОРИТЕТ операцій зберігається (скажімо, у виразі a + b * c спочатку віконуватіметься множення, а потім складання, до якіх бі тіпів має належати а, b і с.) Можна перевізначіті оператор [] (з одним параметром) І () (з будь-яким числом параметрів).
Додані простори імен namespace. Например, если Написати
namespace Foo {int x=5; int ** T; f (y) {return y * x}; g (T);
}
то поза фігурнімі дужками ми повінні Звертатися до T, x, f, g як Foo :: T, Foo :: x, Foo :: f, Foo :: g. Если ми в якійсь одиниці трансляції (файл основного коду, например myFile.cpp, та всі заголовкові файли что ВІН Включає) Хочемо Звертатися до них безпосередно, мі Можемо Написати
using namespace Foo;
Або ж
using Foo :: T;
Кож можна создать сінонім на Вже існуючій простір імен (например, абі избежать Постійно повторюваті довгу Назву прост...