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

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

Войти
Регистрация
Восстановить пароль
 
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
#1

Перегрузка оператора - C++

16.12.2012, 19:17. Просмотров 323. Ответов 6
Метки нет (Все метки)

Здравствуйте, друзья.
Помогите пожалуйста найти ошибку, вернее я знаю где, но пока не понимаю как её исправить:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, 
//то есть общие символы для двух строк. Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg". 
//Для реализации функции перегрузить оператор * (бинарное умножение). 
 
#include <iostream>;
#include <string.h>
#include <conio.h>
using namespace std;
 
class String
{
    char *str;
    int len;
public:
    String();
    String(char *s);
    String(const String&);
    ~String();
    String operator*(const String&);
    void Show();
};
String :: String ()
{
    str = new char[];
    len = 0;
    str[0] = '\0';
}
 
String :: String (char *s)
{
    len = strlen(s);
    str = new char [len + 1];
    strcpy(str, s);
}
 
String :: String(const String& obj)
{
    len = obj.len;
    str = new char [len + 1];
    strcpy(str, obj.str);
}
 
String :: ~String()
{
    delete [] str;
}
 
void String :: Show()
{
    puts(str);
    cout << endl;
}
 
String String :: operator*(const String& obj)
{
    String temp;
 
    int *array = new int[len];
    int meter = 0;
 
    for(int i = 0; i < len; ++i)
    {
        for(int j = 0; j < obj.len; ++j)
        {
            if(str[i] == obj.str[j])
            {
                array[meter++] = i;
                break;
            }
        }
    }
 
    int meter2 = 0;
 
    for(int i = 0; i < meter; ++i)
    {
        temp.str[i] = str[array[i]];
    }
//вот здесь она, "гадина", и сидит!!!
    return temp;
}
 
int main(){
    
    String str1("abcdefj");
    String str2("defjhkl");
    String str3;
 
    str3 = str1 * str2;
    str3.Show();
 
    getch();
}
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка оператора (C++):

Перегрузка оператора + и = - C++
Здравствуйте! Возникла проблема при реализации кода перегрузки операторов. BigInt - это просто класс характеризующий огромные числа в...

Перегрузка оператора - C++
Есть такой вот код: #include &lt;iostream&gt; using namespace std; template &lt;class T&gt; class LIST { T field; unsigned long long int...

перегрузка оператора - C++
Как перегрузить оператор , чтобы его можно было использовать для операций присваивания новых значений определённого члена массива? покажите...

Перегрузка оператора - C++
Здравствуйте. Не могу разобраться, как перезагрузить оператор &gt;&gt;. int a; cin &gt;&gt; a; Надо, чтобы a умножалось на некое число,...

Перегрузка оператора + - C++
Вот заголовочный файл // Заголовочный файл Vector.h #ifndef VECTOR_H #define VECTOR_H #include &lt;iostream&gt; using namespace...

Перегрузка оператора = - C++
Доброго времени суток,не могу понять в чем проблема. Есть класс,в котором переопределен оператор +, есть массив классов, при попытке...

6
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 19:26 #2
А скиньте лог ошибок пожалуйста)
1
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.12.2012, 20:28  [ТС] #3
Лог не выводит, но я думаю, что шибка связана с выходом за пределы массива temp.str .
0
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 20:54 #4
Просто откуда вы узнали об ошибке. Что не так происходит
1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
16.12.2012, 20:55 #5
Цитата Сообщение от OdessaNA Посмотреть сообщение
str = new char[];
* * len = 0;
* * str[0] = '\0';
И такое компилируется? В любом случае это ошибка.
0
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.12.2012, 20:57  [ТС] #6
Лога не было, "просто" программа "подвисала" перед окончанием выполнения.

"Подкрутил-подмазал" и вот что получилось:

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>;
#include <string.h>
#include <conio.h>
using namespace std;
 
class String
{
    char *str;
    int len;
public:
    String();
    String(char *s);
    //~String();
    String operator*(const String&);
    void Show();
};
String :: String ()
{
    str = new char[];
    len = 0;
}
 
String :: String (char *s)
{
    len = strlen(s);
    str = new char [/*len + 1*/];
    strcpy(str, s);
}
 
//String :: ~String()
//{
//  delete [] str;
//}
 
void String :: Show()
{
    for(int i = 0; i < len; ++i)
    {
        cout << str[i] << ' ';
    }
    cout << endl;
}
 
String String :: operator*(const String& obj)
{
    String temp;
 
    int meter = 0;
 
    for(int i = 0; i < len; ++i)
    {
        for(int j = 0; j < obj.len; ++j)
        {
            if(str[i] == obj.str[j])
            {
                temp.str[meter++] = str[i];
                break;
            }
        }
    }
 
    temp.len = meter;
    return temp;
}
 
int main(){
    
    String str1("abcdefj");
    str1.Show();
 
    String str2("defjhkl");
    str2.Show();
 
    String str3;
    str3 = str1 * str2;
    str3.Show();
 
    getch();
}
Подскажите, а деструктор здесь необходим?
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
16.12.2012, 20:58 #7
Цитата Сообщение от OdessaNA Посмотреть сообщение
str = new char[];
Не нужно так писать. Или
C++
1
2
str = new char[ 1 ];
str[ 0 ] = '\0';
или
C++
1
str = 0;
1
16.12.2012, 20:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 20:58
Привет! Вот еще темы с ответами:

Перегрузка оператора << - C++
Есть такой код. class matrix { public: ......; const double* operator(int) const; double* const operator(int); friend...

Перегрузка оператора + - C++
Всем добрый вечер. Прошу помочь разобраться. Задание - Для определения даты поставки строительных материалов необходимо перегрузить...

Перегрузка оператора ++ - C++
#include &quot;Operation.h&quot; using namespace std; const int COUNT = 10; int _tmain(int argc, _TCHAR* argv) { srand((unsigned...

Перегрузка оператора = - C++
StringOne&amp; StringOne::operator=(char *s) { char b; strcpy(b, s); StringOne a = b; return a;//возвращает тоже самое почемуто...


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

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

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