Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 23.03.2015
Сообщений: 55

Перегрузка операторов

05.09.2016, 19:22. Показов 655. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я тут пока изучаю перегрузку, написал следующий код:
Кликните здесь для просмотра всего текста
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
class String{
private:
    size_t size_;
    char* data_;
public:
    String(char const* cstr) : data_(new char[strlen(cstr)]) {
        size_ = strlen(cstr);
        for (size_t i = 0; i < size_; i++)
        {
            data_[i] = cstr[i];
        }
    }
    ~String(){ delete[] data_; }
    operator char const*(){
        if (*this)
            return data_;
        return "";
    }
    String &operator+=(String const& s1){
        char* str = new char[size_+1];
        for (size_t i = 0; i < size_; i++)
            str[i] = data_[i];
        str[size_] = '\n';
        delete[] data_;
        size_ += s1.size_;
        data_ = new char[size_+1];
        for (size_t i = 0; i < (size_ - s1.size_); i++)
            data_[i] = str[i];
        data_[size_ - s1.size_] = '\n';
        for (size_t i = (size_ - s1.size_ + 1); i < size_; i++)
            data_[i] = s1.data_[i - (size_ - s1.size_) - 1];
        data_[size_] = '\n';
        delete[] str;
        return *this;
    }
    void show_(){
        for (size_t i = 0; i < size_; i++)
            cout << data_[i];
        cout << endl;
    }
};
 
//Перегрузка оператора сложения(+= перегружена внутри класса String)
String operator+(String s1, String const& s2){
    return s1 += s2;
}
int main(){
    char *str = "Is coming soon!";
    String s1("This");
    s1 += str;
    s1.show_();
 
    system("pause");
    return 0;
}


Если выводить посимвольно как я описал в функции класса "show_", все выводится отлично,
разбивается по строкам.
А если "data_" напрямую отправить в поток вывода "cout", он между строками добавляет пару строк мусора.
Не могу понять откуда он его берет...
Объясните кто понимает тонкости потоков ввода\вывода.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.09.2016, 19:22
Ответы с готовыми решениями:

Что такое "перегрузка операторов"? Каковы принципы работы перегруженных операторов и назначение указателя this
Добрый день . Помогите понять принцип работы перегрузки операторов. объясните пожалуйста в зависимости от чего зависит агрумент при...

Перегрузка операторов
Задание такое-Составить описание класса для представления комплексных чисел. Обеспечить выполнение операций сложения, вычитания и умножения...

Перегрузка операторов
Доброй ночи! Изучаю перегрузку операторов. Создал класс Дробь, где в качестве данных выступают числитель и знаменатель дроби. ...

1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
05.09.2016, 19:49
Цитата Сообщение от Chronid Посмотреть сообщение
data_(new char[strlen(cstr)])
Chronid, это не тонкости ввода\вывода вы просто забыли о завершающем нуле.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2016, 19:49
Помогаю со студенческими работами здесь

Перегрузка операторов
Вот задание b) Создать класс Set – множество целых чисел, используя динамическую память. Определить операторы работы с множествами:...

Перегрузка операторов
Никак не возьму в толк, почему оно не работает! // CG5.cpp : Defines the entry point for the console application. // #include...

C++ перегрузка операторов
люди такая ситуация кто может в краце объясните перегрузку операторов мне например надо перегрузить оператор умножения что бы умножить...

Перегрузка операторов
Ошибка: &quot;error: invalid operands to binary expression ('Number *' and 'Number *') n3 = n1 * n2;&quot; class Number { public: ...

Перегрузка операторов
Приветствую! Необходима помощь. Разработать класс Vec4 как вектор из 4-х float. Определить оператор ~ для перестановки элементов вектора...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru