Методичні вказівки до виконання лабораторних робіт з курсу "Програмування на С++"

Страницы работы

37 страниц (Word-файл)

Фрагмент текста работы

Таким чином, будь-яка ініаціалізація, яка необхідна об’єкту, при наявності функції-конструктора виконується автоматично.

Конструктор має теж саме ім’я, що і клас, часткою якого він є, та не має повертаємого значення. Конструктор викликається тоді, коли зтворюється об’єкт. Об’єкт в свою чергу зтворюється при виконанні інструкції об’явлення об’єкту. Для глобальних об’єктів конструктор викликається тоді, коли починається виконання програми. Для локальних об’єктів конструктор викликається всякий раз при виконанні інструкції об’явлення об’єкту.

Функція, яка викликається при вилучені об’єкту, є деструктор (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 (захищений).


Робота № 7

Розробка та реалізація програми з рядковим класом ANSI C++

Ціль роботи: оволодіння навичками складання програми з рядковим класом та виконання її в 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 с.


Додаток 2

Алфавіт мови 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 зарезервовані для застосування в майбутньому.


В таблиці наведені операції за приорітетом з описом їх позначень, назв та синтаксиса. Найвищий приорітет мають операції у верхній частці таблиці

Похожие материалы

Информация о работе