Автор: Пользователь скрыл имя, 20 Сентября 2011 в 10:17, курсовая работа
Об’єкт дослідження – обробка одновимірних масивів.
Предметом дослідження – обробка рядкових масивів даних.
Мета дослідження – простежити сутність методів обробка рядкових масивів даних.
Використовуючи шаблони, можна писати узагальнені алгоритми, здатні працювати з будь-якими контейнерами або послідовностями, доступ до членів яких забезпечують ітератори.
Так само, як і в Сі, можливості бібліотек активізуються використанням директиви #include для включення стандартних файлів. Всього в стандарті С++ визначено 50 таких файлів.
STL до включення в стандарт С++ була сторонньою розробкою, на початку — фірми HP, а потім SGI. Стандарт мови не називає її «STL», оскільки ця бібліотека стала невід'ємною частиною мови, проте багато людей до цих пір використовують цю назву, щоб відрізняти її від решти частини стандартної бібліотеки (потоки введення/виводу (Iostream), підрозділ Сі тощо). Проект під назвою STLport, заснований на SGI STL, здійснює постійне оновлення STL, IОstream і рядкових класів. Деякі інші проекти також займаються розробкою приватних застосувань стандартної бібліотеки для різних конструкторських завдань. Кожен виробник компіляторів Сі++ обов'язково поставляє якусь реалізацію цієї бібліотеки, оскільки вона є дуже важливою частиною стандарту і широко використовується.
1.5. Нові
можливості в порівнянні з Сі
Мова С++ багато в чому є надмножиною Сі. Нові можливості С++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності, функції, що підставляються, аргументи за умовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор ::, обробку винятків, динамічну ідентифікацію і багато що інше. Мова С++ також у багатьох випадках строго відноситься до перевірки типів, порівняно з Сі.
У С++ з'явилися коментарі у вигляді подвійної косої риски («//»), які були в попереднику Сі — мові BCPL.
Деякі
особливості С++ пізніше були перенесені
в Сі, наприклад ключові слова const
і inline, оголошення в циклах for і коментарі
в стилі С++ («//»). У пізніших реалізаціях
Сі також були представлені можливості,
яких немає в С++, наприклад макроси vararg
і покращена робота з масивами-параметрами.
1.6. Об'єктно-орієнтовані
особливості мови С++
С++ додає до Сі об'єктно-орієнтовані можливості. Він вводить класи, які забезпечують три найважливіші властивості ООП: інкапсуляцію, успадкування і поліморфізм.
Проблеми старого підходу
В мові C основним способом організації даних були структури. Структура складається з набору полів, які ніяк не захищені. Якщо елементи структури мають змінну довжину, їх представляють у вигляді вказівників. Виділення і звільнення пам'яті під ці вказівники робляться вручну. Так, наприклад, одновимірний масив змінної довжини в мові C з перевіркою меж може представлятися таким чином:
struct
Array {
double* val; int len; };
void FreeArray (const struct Array*); void AllocArray (const struct Array*, int len); double Elem (const struct Array*, int i); void ChangeElem (const struct Array*, int i, double x ); |
Така реалізація небезпечна і неефективна з багатьох причин:
Мова Сі++, використовуючи ООП, усуває всі ці проблеми.
1.7. Не
об'єктно-орієнтовані можливості мови
С++
В цьому розділі описуються можливості, безпосередньо не пов'язані з об'єктно-орієнтованим програмуванням (ООП). Багато які з них, проте, особливо важливі у поєднанні з ООП.
Як видно, однією з принципових відмінностей операторів new та delete від своїх попередників, malloc і free, є обов'язковість ініціалізації об'єктів, пам'ять під які було призначено. Іншою відмінністю є те, що загальна реалізація (тобто визначена за умовчанням) оператора new не повертає нулеву вартість вказівника в випадку помилки призначення пам'яті (наприклад з причини її браку). Натомість, new кидає виняток (наприклад, std::bad_alloc в ситуації браку пам'яті). Так само як і для free, якщо вартістю аргументу оператора delete є 0, ані звільнення пам'яті, ані деініціація не відбувається (при тому, подібна ситуація не вважається помилковою).
void
Print(int x);
void Print(double x); void Print(int x, int y); |
struct
Date {int day, month, year;};
void operator ++(struct Date& date); |
Оператори нічим не відрізняються від (інших) функцій. Не можна описувати оператори над зумовленими типами (скажімо, перевизначати множення чисел); не можна вигадувати нові операції, яких немає в С++ (скажімо **); арність (кількість параметрів) і пріоритет операцій зберігається (скажімо, у виразі a+b*c спочатку виконуватиметься множення, а потім складання, до яких би типів не належали а, b і с.) Можна перевизначити оператор [] (з одним параметром) і () (з будь-яким числом параметрів).
namespace
Foo {
const int x=5; typedef int** T; void f(y) {return y*x}; double g(T); ... } |
то поза фігурними дужками ми повинні звертатися до T, x, f, g як Foo::T, Foo::x, Foo::f, Foo::g. Якщо ми в якійсь одиниці трансляції (файл основного коду, наприклад myFile.cpp, та всі заголовкові файли що він включає) хочемо звертатися до них безпосередньо, ми можемо написати
using namespace Foo; |
Або ж
using Foo::T; |
Також можна створити синонім на вже існуючий простір імен (наприклад, аби уникнути постійно повторювати довгу назву простору)
namespace
MyVeryOwnNameSpace {
typedef std::vector< std::string > StringTable; } namespace My = MyVeryOwnNameSpace; |
Простори імен потрібні, щоб не виникало колізій між пакетами, що мають співпадаючі імена глобальних змінних, функцій і типів. Спеціальним випадком є безіменний простір імен
namespace
{
... } |
Всі імена, описані в ньому, доступні в поточній одиниці трансляції і більше ніде, неначебто ми до кожного опису приписали static.
struct
Time{int hh,mm,ss;};
Time t1, t2; |
struct S {typedef int** T; T x;}; S::T у; |
1.8. Майбутній розвиток мови С++
С++ продовжує розвиватися, щоб відповідати сучасним вимогам. Одна з груп, що займаються мовою С++ в його сучасному вигляді і що направляють комітету із стандартизації С++ поради з його поліпшення, — це Boost. Наприклад, один з напрямів діяльності цієї групи — вдосконалення можливостей мови шляхом додавання в нього особливостей метапрограмування.
Стандарт
С++ не описує способи іменування об'єктів,
деякі деталі обробки винятків і
інші можливості, пов'язані з деталями
реалізації, що робить несумісним об'єктний
код, створений різними
Проте (за станом на час написання цієї статті) серед компіляторів Сі++ все ще продовжується битва за повну реалізацію стандарту Сі++, особливо в області шаблонів — частини мови, зовсім недавно повністю розробленій комітетом стандартизації.