русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Об’єднання рядків


Дата додавання: 2014-04-22; переглядів: 984.


Операція «+» не може бути використана для об’єднання рядків. Тобто ми не можемо використати вираз типу

str3=str1+str2;

де str1, str2, str3 – рядкові змінні. Однак ми можемо сконструювати власний тип String і перезавантажити операцію «+» для об’єднання рядків (в С++ є стандартний тип «string», але ми створимо власний тип, щоб краще розібратися в механізмі перезавантаження). Приведемо лістінг програми 10.6.

#include <iostream.h>

#include <conio.h>

#include <bios.h>

#include <string.h>

#include <stdlib.h>

class String //клас для рядків

{private:

enum {SZ=80}; // max для рядків

char str[SZ]; //Масив для рядка

public:

String ()

{strcpy(str,””);}

 

String(char s[])

{strcpy(str,s);}

 

void display() const

{cout <<str;}

 

//operator

String operator+(String ss) const

{String temp;

if (strlen(str)+strlen(ss.str)<SZ)

{strcpy(temp.str,str);

strcat(temp.str,ss.str);

}

else

{cout <<”\nПереповнення!”;

exit(1);}

 

return temp;

}

};

//////////////////

int main()

{clrscr();

String s1=”\nЗ Новим Роком!”; //Конструктор з параметром

String s2=”З Різдвом!”;

String s3; //Конструктор без параметрів

//vyvid

s1.display();

s2.display();

s3.display();

 

s3=s1+s2;

s3.display();

cout <<endl;

bioskey(0);

return 0;

}

Програма 10.6

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

String operator+(String ss) const

показує, що функція operator+() приймає один аргумент типу String і повертає об’єкт цього ж типу. При об’єднанні рядків за допомогою функції operator+() створюється тимчасовий об’єкт типу String, в нього копіюється рядок об’єкту, для якого викликана функція. Потім, використовуючи бібліотечну функцію strcat(), ми приєднуємо до неї рядок з об’єкту аргументу і повертаємо одержаний у тимчасовому об’єкті рядок. Зауважимо, що ми не можемо використати

return String(string);

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

 

 


<== попередня лекція | наступна лекція ==>
Арифметичні операції | Множинне перезавантаження


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн