2 / 2 / 0
Регистрация: 26.10.2017
Сообщений: 18
1

Перегрузка операции

10.01.2018, 21:38. Показов 1036. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как реализовать код ?
"Определить операции над строками :Вставка символа на определенное место строки с помощью перегрузки операции".
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.01.2018, 21:38
Ответы с готовыми решениями:

Перегрузка операции >>
Всем привет! Суть: есть класс, есть объект, есть перегруженная операция >> для ввода полей...

Перегрузка операции %
Как перегрузить операцию % в с++?

Перегрузка операции
Никак не могу понять как перегрузить оператор. Кучу примеров пересмотрел, но все равно не пойму....

Перегрузка операции
Всем привет! Помогите сделать пожалуйста задание, а то совсем я не понимаю его :-| Перегрузите...

5
12 / 12 / 6
Регистрация: 15.01.2015
Сообщений: 36
10.01.2018, 23:21 2
Неплохо было бы сказать какой именно оператор вы хотите перезагрузить и как исполнять вставку символа , вообще это можно сделать встроенными функциями.Например ставляем строку в конец строки.Первый параметр с какого символа ставляем - включительно позиция
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
string s = "My ";
s.insert(s.length() , "String");
cout << s;
}
0
20 / 20 / 6
Регистрация: 16.11.2017
Сообщений: 87
11.01.2018, 00:20 3
Вам нужно 2 параметра - номер куда вставлять и сама строка. А операторы имеют один параметр.
Видимо нужно сначала какой-то своей функцией задавать номер, а потом перегруженным оператором, например << закидывать строку.
0
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
11.01.2018, 00:35 4
Лучший ответ Сообщение было отмечено Apologyse как решение

Решение

Apologyse, думаю задание некорректно само по себе.
Можно какой-нибудь ужас типа такого понаписать:
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
#include <string>
#include <iostream>
class Inserter
{
    std::string* str;
    size_t pos;
public:
    Inserter(std::string* s, size_t p) : str(s), pos(p){}
    Inserter& operator=(char c)
    {
        str->insert(pos, 1, c);
        return *this;
    }
};
 
class MyString : public std::string
{
public:
    using std::string::basic_string;
    Inserter operator()(size_t pos)
    {
        return Inserter(this, pos);
    }
};
 
int main()
{
    MyString s = "Example of string";
 
    s(10) = 'Z';
    s(5) = 'Y';
    std::cout << s << std::endl;
    return 0;
}
2
20 / 20 / 6
Регистрация: 16.11.2017
Сообщений: 87
11.01.2018, 01:09 5
В принципе можно перегрузить оператор << дважды. Если число - значит задаем место куда вставлять, если строка - вставляем.

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
#include <string>
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
class mystr
{
private:
    string s;
    int n;
 
public:
    mystr() //в конструкторе нужно задать начальное значение n
    {
        n = 0; 
    }
    
    void operator=(const string news) //когда идет присвоение, проверяем, чтобы индекс для вставки не улетел в космос
    {
        s = news;
        if (n > s.length())
            n = s.length();
    }
    
    const string operator<<(const int newn) //если после << число - запоминаем куда вставлять
    {
        if (newn <= s.length())
            n = newn;
        return s;
    }
    
    const string operator<<(const string ins) //если после << строка - вставляем 
    {
        s.insert(n, ins);
        return s;
    }
 
    string gettext() //чтобы добраться до хранимой строки
    {
        return s;
    }
};
 
 
int main()
{
 
    mystr s;
 
    s = "345\n";
    s << "12"; //вставляем по умолчанию в начало
 
    s << 3; //указываем на какое место вставлять следующий фрагмент (номера с 0)
    s << "**";
 
    cout << s.gettext(); //получили 123**45
 
    system("pause");
    return 0;
}
Может более знающие коллеги подскажут что нужно сделать, чтобы работал cout << s, я чё-то не соображу.
0
2 / 2 / 0
Регистрация: 26.10.2017
Сообщений: 18
11.01.2018, 10:47  [ТС] 6
Цитата Сообщение от alex white Посмотреть сообщение
Apologyse, думаю задание некорректно само по себе.
Можно какой-нибудь ужас типа такого понаписать:
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
#include <string>
#include <iostream>
class Inserter
{
    std::string* str;
    size_t pos;
public:
    Inserter(std::string* s, size_t p) : str(s), pos(p){}
    Inserter& operator=(char c)
    {
        str->insert(pos, 1, c);
        return *this;
    }
};
 
class MyString : public std::string
{
public:
    using std::string::basic_string;
    Inserter operator()(size_t pos)
    {
        return Inserter(this, pos);
    }
};
 
int main()
{
    MyString s = "Example of string";
 
    s(10) = 'Z';
    s(5) = 'Y';
    std::cout << s << std::endl;
    return 0;
}
В самом задании не написано какой именно оператор перегрузить
0
11.01.2018, 10:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.01.2018, 10:47
Помогаю со студенческими работами здесь

Перегрузка операции =
Здравствуйте, в программе вылезает такая ошибка MainUnit.cpp(86): E2034 Cannot convert 'string'...

Перегрузка операции =
Подскажите пожалуйста как для шаблонной функции перегрузить = есть не сложно то на примере!!

Перегрузка операции []
Добрый день. Столкнулся с недопониманием, странной ошибкой. #include &lt;iostream&gt; #include...

Перегрузка операции +
Всем привет! Ребята, обясните, пжлста, почему конструктор вызывается дважды. Rational integer1(...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru