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

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

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

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

16.12.2012, 19:17. Просмотров 303. Ответов 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();
}
Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2012, 19:17     Перегрузка оператора
Посмотрите здесь:

Перегрузка оператора + - C++
Написал для перегрузки оператора + class BoolMatrix { private: int feet; public: BoolMatrix(int f): feet(f) {} ...

Перегрузка оператора << - C++
Доброе время суток! Возникло осложнение с лабой. Нужно перегрузить оператор &lt;&lt; так, чтобы при помощи него можно было копировать информацию...

Перегрузка оператора << - C++
Господа, у меня когнитивный диссонанс. При компиляции программы вылезает ошибка: &quot;Ошибка 1 error C2679: бинарный &quot;&lt;&lt;&quot;: не найден...

Перегрузка оператора * - C++
Здрасте. Есть задача: Реализовать класс Matrix размерностью NxN, в которой хранятся числа типа float. Память под элементы выделять...

перегрузка оператора [] - C++
объясните в 3х словах для ламера в чем смысл перегрузки, конкретно оператора

Перегрузка оператора ^ - C++
Здравствуйте! Необходимо перегрузить бинарный оператор ^ для транспонирования матрицы. Есть класс матрицы: template &lt;class T&gt; class...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 19:26     Перегрузка оператора #2
А скиньте лог ошибок пожалуйста)
OdessaNA
19 / 19 / 0
Регистрация: 10.01.2011
Сообщений: 241
16.12.2012, 20:28  [ТС]     Перегрузка оператора #3
Лог не выводит, но я думаю, что шибка связана с выходом за пределы массива temp.str .
Smetanka
56 / 17 / 1
Регистрация: 14.05.2012
Сообщений: 134
16.12.2012, 20:54     Перегрузка оператора #4
Просто откуда вы узнали об ошибке. Что не так происходит
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
16.12.2012, 20:55     Перегрузка оператора #5
Цитата Сообщение от OdessaNA Посмотреть сообщение
str = new char[];
* * len = 0;
* * str[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();
}
Подскажите, а деструктор здесь необходим?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 20:58     Перегрузка оператора
Еще ссылки по теме:

Перегрузка оператора + - C++
Есть 2 объекта класса Constr - R1 и R2. В каждом объекте есть string A. Нужно добавить значения первой строки ко второй. Как это сделать?

Перегрузка оператора [][] - C++
допустим у меня есть клас Matrix и я хочу опедилить оператор доступа к его елементу как реализовть оператор если простой масив я знаю а...

Перегрузка оператора = - C++
Допустим я имею две перегрузки: Zakaz&amp; operator=(Zakaz&amp;); Zakaz operator=(Zakaz); Когда какая из них системой будет...

Перегрузка оператора << - C++
Доброго времени суток. В общем задача состоит в том, чтобы перегрузить операторы &gt;&gt; и &lt;&lt; для чтения/записи в файл. Если идет (a,b) -...


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

Или воспользуйтесь поиском по форуму:
Toshkarik
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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;
Yandex
Объявления
16.12.2012, 20:58     Перегрузка оператора
Ответ Создать тему
Опции темы

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