Форум программистов, компьютерный форум CyberForum.ru

Класс - преобразование массива в строку - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Загрузка bmp файла http://www.cyberforum.ru/cpp-beginners/thread919150.html
установил RAD 2010, auxDIBImageLoad перестал работать(символ не найден пишет мне студия). можете пожалуйста скинуть замену этой функции, bmp имеет 24 битную глубину цвета в opengl (вроде так)
C++ Обращение к элементам двухмерного динамического массива Строки в двумерном динамическом массиве расположены не вплотную друг к другу. Тогда почему чтобы получить значение из массива оператор ar правильно обращается к нужному элементу? #include <iostream> using namespace std; void PrintArray(int **ar, int rows, int cols); int main() { int **ar; http://www.cyberforum.ru/cpp-beginners/thread919145.html
C++ Тип контейнера как параметр шаблонной функции
Добрый день. Подскажите, пожалуйста, можно ли передавать тип контейнера как параметр в шаблонную функцию? Если да, то как это делается? Есть функция (см. код ниже), и в результате хотелось бы, чтобы она могла работать со всеми контейнерами, имеющими метод push_back(). template<class T> ifstream fill_v(vector<T>& v, const string& from) { ifstream ifs(from); if (!ifs) throw...
C++ Кодирующие контейнеры?
Существуют ли контейнеры, которые позволяют хранить N элементов за memory<O(N)? Именно на ходу. Скорость не так важна.
C++ Хвостовая рекурсия http://www.cyberforum.ru/cpp-beginners/thread919106.html
int fac_times (int n, int acc) { if (n == 0) return acc; else return fac_times(n - 1, acc * n); } int factorial (int n) { return fac_times (n, 1); }. Можно ли в хвостатом факториале избавиться от вспомогательной функции? Как?
C++ Контур пятиконечной звезды в программе Dev C++ 5.4.2 Здравствуйте, помогите пожалуйста сделать задание: нарисовать контур пятиконечной звезды средствами языка с++ Только нужно работать именно с новыми компиляторами (как Dev C++ 5.4.2) Заранее спасибо! подробнее

Показать сообщение отдельно
VLK
 Аватар для VLK
192 / 161 / 12
Регистрация: 05.05.2013
Сообщений: 1,221
07.07.2013, 15:36     Класс - преобразование массива в строку
Кликните здесь для просмотра всего текста
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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 14:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru