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

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

Восстановить пароль Регистрация
 
LiV
0 / 0 / 0
Регистрация: 28.01.2013
Сообщений: 54
17.04.2013, 13:43     В классе string перегрузить операцию вчитания #1
Здравствуйте! Помогите, кто сможет.
Задание: есть строка например, 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;
Что то не правильно в методе перегрузки операции -, так и не смог решить.
За ранее спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 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
Сообщений: 54
17.04.2013, 14:18  [ТС]     В классе string перегрузить операцию вчитания #3
Т.е. здесь нужно написать конструктор копирования и деструктор?
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 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 перегрузить операцию вчитания
Ответ Создать тему
Опции темы

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