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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
LiV
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 56
#1

В классе string перегрузить операцию вчитания - C++

17.04.2013, 13:43. Просмотров 302. Ответов 3
Метки нет (Все метки)

Здравствуйте! Помогите, кто сможет.
Задание: есть строка например, String s1("123"); и строка String s2("здравствуйте");
написав: s1=s2-5; cout<<s1<<endl; нужно вывести на экран последние пять символов: "вуйте".
Моя проблема в том, что на экран выводятся первые пять символов, а дальше мусор: "здравээээээ...".
Вот весь мой код:
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
#ifndef _STRING_H_
#define _STRING_H_
 
#include<iostream>
#include<Windows.h>
#include<time.h>
using namespace std;
 
class String
{
    char *s;// произвольное колличество символов в строке
    int len;// длина строки
public:
    String()
    {
        s=NULL;
        len=0;
    }
    String(char *s)// создание строки
    {
        int l=strlen(s);// длина строки
        this->s=new char [l+1];//выделение динамич памяти для строки
        strcpy(this->s, s);//запись в строку
        this->len=l;//длина полученой строки
    }
    char* GetS()
    {
        return this->s;
    }
    int GetLen()
    {
        return this->len;
    }
    String& operator-(int B)//перегрузка операции -
    {
        if(B>this->len || B>0)
        {
            char* tmp=new char[B];// выделение строки
            strncpy(tmp, this->s, B);// копирование из строки s, B символов в строку tmp
            String str1(tmp);//создание строки
            str1.len=strlen(tmp);//длина строки
            delete[]tmp;//удаление строки tmp - предотвращение утечки памяти
            return str1;
        }
    }
};
ostream& operator<<(ostream &os, String &st)
{
    os<<st.GetS();
    return os;
}
 
 
#endif
За тем в main я пишу:
C++
1
2
3
4
5
6
    
String s1("123");
String s2("здравствуйте");
 
s1=s2-5;
cout<<s1<<endl;
Что то не правильно в методе перегрузки операции -, так и не смог решить.
За ранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 13:43     В классе string перегрузить операцию вчитания
Посмотрите здесь:

C++ Перегрузить операцию сложения для класса дробей
C++ Как перегрузить оператор в виртуальном классе
Найти ошибку и перегрузить операцию C++
Помогите перегрузить операцию присваивания C++
Описать класс одномерный массив (вектор) целых чисел. Перегрузить следующую операцию: > уменьшить элементы вектора на заданное значение C++
C++ В классе перегрузить операцию сложения
Не могу перегрузить [] в производном классе C++
C++ Перегрузить операцию сложения в базовом классе, который имеет два наследника
C++ Как в классе перегрузить оператор двойного индексирование?
Как перегрузить операцию ++ для строк C++
C++ В классе Строка перегрузить оператор () для приема целочисленных и дробных значений
C++ Как перегрузить операцию деления, когда нужно переменную класса поделить на встроенный тип

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
17.04.2013, 14:05     В классе string перегрузить операцию вчитания #2
LiV, http://en.wikipedia.org/wiki/Rule_of...programming%29
LiV
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 56
17.04.2013, 14:18  [ТС]     В классе string перегрузить операцию вчитания #3
Т.е. здесь нужно написать конструктор копирования и деструктор?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
17.04.2013, 14:26     В классе string перегрузить операцию вчитания #4
LiV, и так же оператор присваивания.
Но основная проблема у Вас в этом:
Цитата Сообщение от LiV Посмотреть сообщение
String& operator-(int B)
Вы возвращаете ссылку на локальный объект. При выходе из функции он уничтожается.

Добавлено через 1 минуту
Да же не при выходе из функции, а после конца тела оператора if. Так же, если условие не выполняется, то ничего не возвращается. Но функция в любом случае должна что то вернуть.
Yandex
Объявления
17.04.2013, 14:26     В классе string перегрузить операцию вчитания
Ответ Создать тему
Опции темы

Текущее время: 17:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru