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

Свой класс string - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
atomohod
 Аватар для atomohod
20 / 20 / 1
Регистрация: 01.04.2010
Сообщений: 57
27.10.2011, 14:11     Свой класс string #1
Всем доброго дня! Только начал разбираться с этим замечательным языком. Вот пытаюсь реализовать свой класс строки, но не могу понять в чем ошибка. Где я неправильно работаю с памятью?

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
class mystring {
char *str;
public:
    void show() 
    { 
        register int i = 0; 
        while (str[i]) 
        { 
            cout << str[i]; 
            i++; 
        } 
    }  
    
    mystring(char *c = "") 
    { 
        str = new char[strlen(c)]; 
        register int i = 0; 
        while(c[i]) 
        { 
            str[i] = c[i]; 
            i++; 
        } 
 
        str[i] = '\0';
    }
 
    ~mystring() { cout << "destruct\n"; delete [] str; } 
};
 
int main()
{ 
    {
        mystring a("hi"), b(" all"), c;     
    
        a.show();
        b.show();
        c.show();
        cout << endl;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2011, 14:11     Свой класс string
Посмотрите здесь:

Класс Person. Класс String C++
Свой класс String C++
C++ Свой контейнерный класс
C++ Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина?
Свой класс в С++ C++
C++ Создать свой класс
Создать свой класс C++
Динамическая память, свой класс C++
свой класс string C++
Возможно ли написать свой класс 2д графики? C++
Строки свой класс C++
C++ Написал свой string. Проверьте код на наличие подводных камней, утечек памяти и других ошибок

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vndtta
66 / 43 / 5
Регистрация: 17.10.2011
Сообщений: 146
Завершенные тесты: 1
27.10.2011, 14:22     Свой класс string #2
Цитата Сообщение от atomohod Посмотреть сообщение
Всем доброго дня! Только начал разбираться с этим замечательным языком. Вот пытаюсь реализовать свой класс строки, но не могу понять в чем ошибка. Где я неправильно работаю с памятью?

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
class mystring {
char *str;
public:
    void show() 
    { 
        register int i = 0; 
        while (str[i]) 
        { 
            cout << str[i]; 
            i++; 
        } 
    }  
    
    mystring(char *c = "") 
    { 
        str = new char[strlen(c)]; 
        register int i = 0; 
        while(c[i]) 
        { 
            str[i] = c[i]; 
            i++; 
        } 
 
        str[i] = '\0';
    }
 
    ~mystring() { cout << "destruct\n"; delete [] str; } 
};
 
int main()
{ 
    {
        mystring a("hi"), b(" all"), c;     
    
        a.show();
        b.show();
        c.show();
        cout << endl;
    }
}
в конструкторе char *c="" присваивается адрес временного объекта
silent_1991
Эксперт C++
4945 / 3021 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.10.2011, 14:43     Свой класс string #3
Цитата Сообщение от vndtta Посмотреть сообщение
в конструкторе char *c="" присваивается адрес временного объекта
Не в этом дело, тут всё нормально.

atomohod, вам надо выделять памяти strlen(c) + 1, под нулевой символ.

Добавлено через 20 секунд
Ну и параметр конструктора неплохо бы сделать константной строкой.
Nameless One
Эксперт С++
 Аватар для Nameless One
5759 / 3408 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
27.10.2011, 14:54     Свой класс string #4
Цитата Сообщение от vndtta Посмотреть сообщение
в конструкторе char *c="" присваивается адрес временного объекта
нет, это определение параметра по умолчанию конструктора.

К вышесказанному - вместо цикла копирования лучше использовать strcpy, а вместо функции вывода перегрузить оператор вывода в поток. Ну и сделать доступ по индексу, операцию конкатенации строк, поиск в строке и другие плюшки
vndtta
66 / 43 / 5
Регистрация: 17.10.2011
Сообщений: 146
Завершенные тесты: 1
27.10.2011, 14:57     Свой класс string #5
Цитата Сообщение от vndtta Посмотреть сообщение
в конструкторе char *c="" присваивается адрес временного объекта
а не, это ничего не дает

забыл обновить страничку
atomohod
 Аватар для atomohod
20 / 20 / 1
Регистрация: 01.04.2010
Сообщений: 57
27.10.2011, 15:17  [ТС]     Свой класс string #6
вместо цикла копирования лучше использовать strcpy, а вместо функции вывода перегрузить оператор вывода в поток. Ну и сделать доступ по индексу, операцию конкатенации строк, поиск в строке и другие плюшки
да, это понятно. Цикл копирования как раз то сделал такой чтобы потетсить укзатели)

спасибо всем!
Yandex
Объявления
27.10.2011, 15:17     Свой класс string
Ответ Создать тему
Опции темы

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