Таким чином, будь-яка ініаціалізація, яка необхідна об’єкту, при наявності функції-конструктора виконується автоматично.
Конструктор має теж саме ім’я, що і клас, часткою якого він є, та не має повертаємого значення. Конструктор викликається тоді, коли зтворюється об’єкт. Об’єкт в свою чергу зтворюється при виконанні інструкції об’явлення об’єкту. Для глобальних об’єктів конструктор викликається тоді, коли починається виконання програми. Для локальних об’єктів конструктор викликається всякий раз при виконанні інструкції об’явлення об’єкту.
Функція, яка викликається при вилучені об’єкту, є деструктор (destructor). Ім’я деструктора співпадає з ім’ям конструктора, але з символом “~” (тільда) на початку. Приклад програми з конструктором та деструктором.
#include <iostream>
class myclass {
int a; // закрита частка myclass
public:
myclass(); //конструктор
~myclass(); //деструктор
void show_a();
};
void myclass::myclass(){
a=5;
}
void myclass::~myclass(){
cout<<”Вилучення...\n”;
}
void myclass::show_a(){
cout<<a<<endl;
}
void main(){
myclass ob;
ob.show_a();
}
Фактично як конструктор, так і деструктор можуть виконувати будь-який тип операції. Але вважається, що код ці функції не повинні робити ничого, що не має відношення до ініціалізації або поверненння об’єктів у первинний стан.
Конструктор може мати параметри. На відміну від конструктора деструктор мати параметри не може.
Успадкування (inheritance) – це процес, завдяки якому один об’єкт успадковує властивості іншого та додає до них ще свої риси. Успадкування дозволяє будувати ієрархію класів, здійснюючи перехід від більш загальних до більш спеціальних.Базовий клас (base class) – це клас, властивості якого передаються у спадшину іншому класу (похідному класу). Похідний клас (производный класс, derived class) – це клас, який бере у спадшину властивості базового класу.
Загальний вигляд успадкування базового класу похідним такий:
class ім’я_похідного_класу: спеціфікатор_доступу ім’я_базового_класу
{
…
};
Спеціфікатор_доступу – це одне з трьох службових слів: public (відкритий), private (закритий) або protected (захищений).
Ціль роботи: оволодіння навичками складання програми з рядковим класом та виконання її в IDE Borland C++ 5.0.
В C++ вбудований рядковий тип даних не підтримується. Але для обробки рядків тут є дві можливості. По-перше, можна використовувати символьний масив (дивись роботу №4). Другий метод заснован на використанні об’єктів рядкового класу string.
Клас string дуже велик, у ньому є багато конструкторів і функцій-членів. Крім того, багато функцій-членів мають велику кількість форм, які перезавантажуються. З цієї причини тут не можна розповісти про усі члени класу string. Для отримання необхідної інформації з потрібних членів класу string треба звернутися до довідника з біблиотеки класів. Так, щоб знайти опис конструкторів рядкового класу в IDE Borland C++ 5.0 виконайте наступні кроки:
1) Виберіть Contents з меню Help.
2) Серед розділів довідкової системи виберіть Borland C++ Class Libraries Reference Guide.
3) Далі слідуйте гіперпосиланням - C++ Service Classes, String class та About string class.
4) Для отримання інформації про конструктори використуйте гіперпосилання string::string
Прототипи трьох конструкторів, які найчастіше використовуються, наведені нижче
string();
string(const char *рядок);
string(const string &рядок);
В перший формі зтворюється порожній об’єкт типа string. В другій формі – об’єкт типа string з рядка, який закінчується нулем та позначений вказівником *рядок. Ця форма забезпечує перетворення рядка, який закінчується нулем в об’єкт типа string. В третій формі об’єкт типа string зтворюється з іншого об’єкту типа string.
Приклад 1.
// Короткий пример использования строкового класса
#include <iostream>
#include <string>
main(){
string str1("Представление строк");
string str2("Вторая строка");
string str3;
// присваивание строк
str3 = str1;
cout << str1 << "\n" << str3 << "\n";
// конкатенация двух строк
str3 = str1 + str2;
cout << str3 << "\n";
// сравнение строк
if(str3 > str1) cout << "str3 > str1\n";
if(str3==str1+str2) cout << "str3==str1+str2\n";
//строковому объекту можно присвоить обычную строку
str1 = "Это обычная строка\n";
cout << str1;
// создание строкового объекта
// с помощью другого строкового объекта
string str4(str1);
cout << str4;
// ввод строки
cout << "Введите строку: ";
cin >> str4;
cout << str4;
}
Приклад 2.
// Использование функций insert(), erase() и replace()
#include <iostream>
#include <string>
main(){
string str1("Это проверка");
string str2("АБВГДЕЖ");
cout << "Исходные строки:\n"
cout << "str1: " << str1 << endl;
cout << "str2: " << str2 << "\n\n";
// работа функции insert()
cout << "Вставка строки str2 в строку str1:\n"
str1.insert(4, str2);
cout << str1 << "\n\n";
// работа функции erase()
cout << "Удаление семи символов из строки str1:\n"
str1.erase(4, 7);
cout << str1 << "\n\n";
// работа функции replace()
cout << "Замена восьми символов из str1 символами из str2:\n"
str1.replace(4, 8, str2);
cout << str1 << "\n\n";
}
Приклад 3.
/*Ассоциативный список слов и антонимов для объектов типа string
*/
#include <iostream>
#include <map>
#include <string>
main(){
map<string, string> m;
int i;
m.insert(pair<string, string>("да", "нет"));
m.insert(pair<string, string>("хорошо", "плохо"));
m.insert(pair<string,string>("влево"),"вправо"));
m.insert(pair<string, string>("вверх"), "вниз"));
string s;
cout << "Введите слово: ";
cin >> s;
map<string, string>::iterator p;
p = m.find(s);
if(p != m.end())
cout << "Антоним: " << p->second;
else
cout << "Такого слова в ассоциативном списке нет\n";
}
1. Буч Г. Объектно-ориентированное проектирование с примерами применения: Пер. с англ. – М.:Конкорд, 1992. – 519 c.
2. Дьюхарт С., Старк К. Программирование на Си++. – К.:НИПФ “ДиаСофт”, 1993. – 272 c.
3. Киммел П. и др. Borland C++: Пер. с англ. – СПб.: BHV – Санкт-Петербург, 1997. – 976 с.
4. Страуструп Б. Программирование на Си++: Пер. с англ. – М.:Радио и связь, 1991.– 352 c.
5. Шилдт Г. Самоучитель C++, 3-е издание: пер. с англ. – СПб.: BHV – Санкт-Петербург, 1998. – 688 с.
Алфавіт мови C++
Алфавіт мови C++ складають:
- букви латинського алфавіту: A, B, ..., Z, a, b, ..., z та символ підкреслення _ (ASCII-код 95);
- арабські цифри: 0, 1,..., 9;
- спеціальні символи: + - * / % = < > . , : ; ’ ” ( ) [ ] { } # $ ^ ~ ! ? & |;
- символи-розділителі: символ пропуску (ASCII-код 32) та управляючи символи (наведені у додатку 3);
- cлужбові (зарезервовані) слова (наведені у додатку 4).
Додаток 3
Додаток 4
Службові слова мови C++
Службові (зарезервовані) слова - це обмежена група слів, сенс яких зафіксовано у мові. Службові слова не можна вживати як ідентифікатори змінних, констант і т.п.
asm |
auto |
bool |
break |
case |
catch |
char |
class |
const |
const_cast |
continue |
default |
delete |
do |
double |
dynamic_cast |
else |
enum |
explicit |
extern |
false |
float |
for |
friend |
goto |
if |
inline |
int |
long |
mutable |
namespace |
new |
operator |
overload |
private |
protected |
public |
register |
reinterpret_cast |
return |
short |
signed |
sizeof |
static |
static_cast |
struct |
switch |
template |
this |
throw |
true |
try |
typedef |
typeid |
typename |
union |
unsigned |
using |
virtual |
void |
volatile |
wchar_t |
while |
Идентифікатори signed та volatile зарезервовані для застосування в майбутньому.
В таблиці наведені операції за приорітетом з описом їх позначень, назв та синтаксиса. Найвищий приорітет мають операції у верхній частці таблиці
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.