07.07.2013, 15:36. Просмотров 801. Ответов 8
Кликните здесь для просмотра всего текста
C++ |
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
| #include <iostream>
class str
{
public:
~str() // Деструктор, удаляет массив
{
delete[] stroka;
dlina_stroki = 0;
}
str() // Конструктор по умолчанию, создает массив нулевой длины
{
stroka = new char[1];
stroka[0] = '\0';
dlina_stroki = 0;
}
str(const char *rhs) // конструктор, преобразует массив символов в строчку
{
dlina_stroki = strlen(rhs); // устанавливаем длину массива при помощи оператора strlen
stroka = new char[dlina_stroki +1]; // выделяем память под массив на 1 элемент больше
for (int i = 0; i < dlina_stroki; i++)
{ stroka[i] = rhs[i]; } // переводим полученные данные (rhs) в свой массив (stroka)
stroka[dlina_stroki] = '\0'; // вставляем в последний элемент массива пробел
}
str(const str & rhs) // конструктор копировщик, работает по тому же принципу что и конструктор выше
{
dlina_stroki = rhs.get_dlina_stroki();
stroka = new char[dlina_stroki + 1];
for (int i = 0; i < dlina_stroki; i++)
{ stroka[i] = rhs[i]; }
stroka[dlina_stroki] = '\0';
}
char operator[] (int rhs) const
{
if (dlina_stroki < rhs)
{ return stroka[dlina_stroki - 1]; }
else
{ return stroka[rhs]; }
}
char & operator[] (int rhs)
{
if (dlina_stroki < rhs)
{ return stroka[dlina_stroki - 1]; }
else
{ return stroka[rhs]; }
}
str & operator= (const str & rhs) // оператор равно для класса str
{
if (this == &rhs) // проверяем, не пытаемся ли мы приравнять один и тот же объект т.е. var = var
{ return *this; } // если пытаемся, то просто возвращаем ссылку на него
delete[] stroka; // удаляем, то, что есть сейчас
dlina_stroki = rhs.get_dlina_stroki(); // узнаем новую длину строки
stroka = new char[dlina_stroki + 1]; // выделяем память под новый массив
for (int i = 0; i < dlina_stroki; i++)
{ stroka[i] = rhs[i]; } // переводим полученные данные (rhs) в свой массив (stroka)
stroka[dlina_stroki] = '\0'; // вставляем в последний элемент массива пробел
return *this; // возвращаем новое значение
}
str operator+ (const str & rhs)
{
int temp_dlina_stroki = get_dlina_stroki() + rhs.get_dlina_stroki(); // Узнаем необходимую длину строки для двух объектов
str temp(temp_dlina_stroki + 2); // выделяем память под новый временный объект
int i = 0;
int j = 0;
for (i; i < dlina_stroki; i++)
{ temp[i] = stroka[i]; } // переводим первую часть во временный массив
temp[i] = ' '; // вставляем между массивами (строчками) пробел
i++;
for (j ; j < rhs.get_dlina_stroki(); j++, i++ )
{ temp[i] = rhs[j]; } // переводим вторую часть во временный массив
temp[temp_dlina_stroki + 1] = '\0'; // вставляем в последний элемент массива пробел
return temp; // возвращаем в качестве результата временны объект
}
char *get_stroka() const { return stroka; } // функция член, возвращает массив
int get_dlina_stroki() const { return dlina_stroki; } // функция член, возвращает длину массива
void show_stroka() const { std::cout << stroka << "\n"; } // функция член, выводит на экран строку
private:
str(int rhs)
{
dlina_stroki = rhs;
stroka = new char[dlina_stroki +1];
for (int i = 0; i < dlina_stroki; i++)
{ stroka[i] = '\0'; }
stroka[dlina_stroki] = '\0';
}
char *stroka; // массив в котором хранится строка
int dlina_stroki; // длина массива
};
int main()
{
str sOne("Hello world!");
str sTwo("Nice day!");
str sThree("test");
sThree.show_stroka();
sThree = sOne;
sThree.show_stroka();
sThree = sOne + sTwo;
sThree.show_stroka();
system("pause");
return 0;
} |
|
Пожалуйста, что делает член функция в строках 40-47 и 49 - 55, только пожалуйста не в 3-х словах, а поподробнее, что в частности будет являться
rhs
Так же что именно делает закрытый конструктор в строке 98-105
И еще вопрос, подскажите как сделать что бы я мог самостоятельно вводить вводить текст после запуска программы т.е. :
C++ |
1
2
| int var;
std::cin >> var; |
|
А как сделать подобное в моей программе и на сколько это сложно?
Просьба, не нужно давать другой код, например
strcat и т.д. мне бы хотелось решить все эти проблемы (или те которые можно) при помощи библиотеки
iostream