Теоретические сведения для студентов специальностей «Экономика и организация производства», страница 14

string (int j);                    //конструктор (объявление)

          ~strig();                           //деструктор (объявление)

          void shov_i(void); //ф-я член - класса (метод) объявление прототипа

};                           //конец объявления класса

string::string(int j)           //определение конструктора вне описания класса

{ i=j; cout<<"работает конструктор \n"; }

void String::Show_i(void)         //определение метода вне класса

{cout << "i="<<i<< “\n”;}           //тело метода

string::~string()              //определение деструктора

{cout <<"работает деструктор \n";} //вывод потоком (при помощи

// переопределенной операции <<)

void main (void) {

          string my_ob1 (25);         //инициализация объекта my-ob1

          string my_ob2 (36);         //инициализация объекта my-ob2

my_ob1.show_i(); // вызовфункции show_i() класса string,для my_ob1

          my_ob2.show_i();} // вызовфункции shon_i() класса string, для my_ob2

Результаты работы данной программы:

          работает конструктор

          работает конструктор

          i=25

          i=36

          работает деструктор

          работает деструктор

Деструкторы выполняются в обратной последовательности по отношению к конструкторам. Первым разрушается объект, созданный последним.

Помимо работы конструктора и деструктора данный пример демонстрирует и новые возможности ввода/вывода в С++. Включенный файл iostream.h описывает функции, обеспечивающие поддержку ввода/вывода потоком. Строка

          cout<<"i="<<i<< “\n”;

приводит к выводу символьной строки i= значение i и обработке символа “\n”– новая строка. Оператор ввода значения переменной для int i1; выглядит следующим образом:

cin>>i1;

Отметим, что в С++ тип данных можно объявить в любом месте функции (не обязательно в ее начале).

Чтобы реализовать данный пример при помощи ключевого слова struct, достаточно изменить описание класса следующим образом:

struct string {        private:        int i;

public:                   string(int j); //объявление конструктора

                    ~string();     // объявление деструктора

          void show_i (void);};                 // объявление метода класса

Смеси (union) в С++ также близки к классам. Фактически смесь - это та же структура (struct), в которой все компоненты-данные помещаются в одно и то же место памяти.

Рассмотрим пример объявления смеси в С++

          /* СМЕСЬ В С++ */

          #include<iostream.h>

#include<string.h>

          union my_union

          { char str[22];                  //компоненты

          struct str1_2                   //cмеси

          { char str1[9];                  //имеют

          char str2[12];                  //атрибут public

          } my_s;                            // my_s - объекттипа str1_2

          my_union(char*s); //конструкторкласса

void print(void);              //функция - метод класса

          };my_union::my_union(char*s) //определение конструктора

          {strcpy(str,s);}                //функция копирования строки s в строку str.

void my_union::print(void)

          { cout<<my_s.str2<<”\n”;

//вывод элемента структуры str2 и перевод строки

          my_s.str2[0]=0;                         //запись признака конца строки

          cout<<my_s.str1<< “\n”; }        //вывод значения str1 объекта my_s

void main (void)

          {my_union ob ("Факультет исторический»);

//создание и инициализация объекта ob

          ob.print();                        // вызов ф-ии print() для ob }

РЕЗУЛЬТАТЫ ВЫПОЛНЕНИЯ:

1. Создается объект ob и для него вызывается конструктор, который копирует строку "Факультет исторический" в компонент класса str[22];