1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| #include "stdafx.h"
#include <iostream>
#include <string.h>
using namespace std;
class String //описание класса-строки
{
char str[80]; //объект, созданный этим классом будет содержать строку в 80 символов
public:
String(); //конструктор по умолчанию
String(const String &ob); //конструктор копирования
String(char *s); //конструктор с одним параметром (когда мы при создании объекта
void print(); //метод для вывода строки на экран
void operator++(); //метод для перегрузки символа ++ - для преобразования символов строки в строчные символы
friend String operator+(String &ob1, String &ob2); //функция-друг класса String для перегрузки +. делает конкатенацию(добавление одной строки в конец другой)
};
String::String() //описание конструктора по умолчанию - создает объект с нулевой строкой
{
str[0] = '\0';
}
String::String(const String &ob) //описание конструктора копирования
{
strcpy(str,ob.str); //strcpy - стандартная функция из библиотеки <string.h> копирует из строки объекта ob в строку объекта, который создается с помощью конструктора копирования.
}
String::String(char *s) //описание конструктора с одним параметром
{
strcpy(str,s); //s - это указатель на строку, которую мы вводим при создании объекта (смотри main())
}
void String::print() //описание метода для вывода на экран строки
{
cout << str << endl;
}
void String::operator++() //
{
int i=0;
while(str[i]!='\0') //цикл выполняется, пока не дошли до конца строки
{
str[i] = tolower(str[i]); //tolower - функция, которая преобразует символы строки в строчные символы
i++;
}
}
String operator+(String &ob1, String &ob2)
{
char *s = strcat(ob1.str,ob2.str); //strcat - функция, которая добавляет строку из объекта ob2 в конец строки объекта ob1.
return s; //operator+ возвращает указатель на строку, которая содержит обе строки из объектов
}
int _tmain(int argc, _TCHAR* argv[])
{
String s1("hello. i'm a human. "); //создаем объект, содержащий строку с помощью конструктора String(char *s) char *s - это строка, которая вписана в скобках
String s2("WOW. i'm too."); //тоже с помощью String(char *s)
String s3(s1); //создаем объект, с помощью конструктора копирования
String s4; //создаем объект, с помощью конструктора по умолчанию
s1.print(); //выводим на экран строку объекта s1
cout << endl;
s2.print(); //выводим на экран строку объекта s2
cout << endl;
s3.print(); //выводим на экран строку объекта s3
cout << endl;
s4 = s1+s2; //здесь происходит перегрузка, реализованная с помощью функции friend String operator+(String &ob1, String &ob2). s4 теперь это объект , содержащий строку, составленную из s1 и s2
s4.print();
cout << endl;
s2++; //здесь происходит перегрузка void String::operator++()
s2.print();
cout << endl;
return 0;
} |