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

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

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

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

17.04.2013, 13:43. Просмотров 316. Ответов 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;
Что то не правильно в методе перегрузки операции -, так и не смог решить.
За ранее спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.04.2013, 13:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос В классе string перегрузить операцию вчитания (C++):

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

Перегрузить операцию сложения в базовом классе, который имеет два наследника - C++
Как перегрузить операцию сложения в базовом классе, который имеет два наследника(объекты которых как раз и надо сложить)

Найти ошибку и перегрузить операцию - C++
Ребята! Пропадаю! Помогите найти ошибку в коде и написать перегрузку: class Reis { int p; int hl; public: reis operator - (reis...

Помогите перегрузить операцию присваивания - C++
Здравствуйте, есть программа: #include&lt;iostream&gt; using namespace std; struct Element { char data; //Aaiiua Element...

Как перегрузить операцию ++ для строк - C++
Перегрузить унарные операторы «++» (префиксную и постфиксную). Как перегружать для int и для чего это надо я понимаю, но в случае...

Перегрузить операцию сложения для класса дробей - C++
Люди добрые, помогите инвалиду;) Нужно написать программу на Си, задача такова: Перегрузить операцию сложения для класса дробей и...

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

Добавлено через 1 минуту
Да же не при выходе из функции, а после конца тела оператора if. Так же, если условие не выполняется, то ничего не возвращается. Но функция в любом случае должна что то вернуть.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 14:26
Привет! Вот еще темы с ответами:

Как перегрузить операцию = для присваивания элементам структуры внутри класса значений? - C++
Помогите, если не затруднительно. Столкнулся с проблемой, когда пытался присвоить в конструкторе значения элементам структуры, которая...

Как перегрузить операцию деления, когда нужно переменную класса поделить на встроенный тип - C++
Добрый день! Подскажите, пожалуйста, простой пример, как провести перегрузку операции деления /, если нужно переменную класса поделить на...

Не могу перегрузить [] в производном классе - C++
Не могу перегрузить оператор в производном классе class_arr.cpp #include &lt;iostream&gt; #include &quot;IntArray.h&quot; #include...

Как перегрузить оператор в виртуальном классе - C++
Помогите пожалста разобраться с перегрузкой операторов в абстрактных классах!!!! Есть чисто виртуальный класс физических величин ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.04.2013, 14:26
Ответ Создать тему
Опции темы

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