Как сделать перегрузку оператора?
Всем привет! Есть класс в котором создается массив строк. Как перезагрузить оператор +, так чтобы можно было создать массив строк из текущего массива строк + другой массив? Типа как в python метод extend. Вообще можно ли такое сделать?
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Strings{
private:
int count_strings;
public:
vector <string> strs;
Strings(int);
string get_str(int); // получение строки из массива
void fill_array(); // заполнение массива
void print(); // вывод на экран
};
Strings::Strings(int count_strings){
this->count_strings = count_strings;
}
void Strings::fill_array(){
for (int i=0;i<this->count_strings;i++){
char * t = new char(50);
cout << "String " << i << ": ";
cin >> t;
this->strs.push_back(t);
}
}
void Strings::print(){
for (int i=0;i<this->count_strings;i++){
cout << this->strs[i] << endl;
}
}
string Strings::get_str(int index){
if (index > this->count_strings){
return "Вы вышли за пределы массива";
}
return this->strs[index];
}
int main(){
Strings obj(3);
obj.fill_array();
obj.print();
string buffer = obj.get_str(2);
cout << buffer << endl;
}
Ответы (1 шт):
Да запросто. Только вот мне ваш подход не нравится - например, зачем это поле с количеством строк? которое известно - оно равно количеству строк в векторе...
Или считывание не строк, а слов, длиной не более 50... Возврат строки при выходе за пределы массива строк - а вдруг именно такая строка и хранится в массиве? А вот исключения, генерируемые функцией at() - это вполне однозначное указание на выход индекса за пределы массива.
Словом, я немного переделал ваш код, добавив тот самый оператор.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Strings{
vector <string> strs;
public:
Strings() {};
string get_str(int) const; // получение строки из массива
void fill_array(int count); // заполнение массива
void print() const; // вывод на экран
Strings operator+(const Strings&s) const;
};
void Strings::fill_array(int count)
{
for (int i=0;i<count;i++)
{
string s;
cout << "String " << i << ": ";
getline(cin,s);
strs.push_back(s);
}
}
void Strings::print() const
{
for (int i=0;i<strs.size();i++)
{
cout << strs[i] << endl;
}
}
string Strings::get_str(int index) const
{
return strs.at(index);
}
Strings Strings::operator+(const Strings&s) const
{
Strings r;
r.strs = strs;
r.strs.insert(r.strs.end(),s.strs.begin(),s.strs.end());
return r;
}
int main()
{
Strings obj;
obj.fill_array(3);
obj.print();
Strings n;
n = obj + obj;
n.print();
string buffer = obj.get_str(2);
cout << buffer << endl;
}