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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.60
atomohod
20 / 20 / 1
Регистрация: 01.04.2010
Сообщений: 57
#1

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

27.10.2011, 14:11. Просмотров 2052. Ответов 5
Метки нет (Все метки)

Всем доброго дня! Только начал разбираться с этим замечательным языком. Вот пытаюсь реализовать свой класс строки, но не могу понять в чем ошибка. Где я неправильно работаю с памятью?

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
Посмотрите здесь:

Свой класс String - C++
Небольшой набросок на класс String #include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class String { struct...

свой класс string - C++
Есть два вопроса: почему компилятор ругает вот это s = str + str2;? Хотя догадываюсь почему, скорее всего у меня не так реализован оператор...

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

Строки свой класс - C++
Вобщем в чем проблема, нужно реализовать строковый класс начальная структура такова Str.h #include &lt;iostream&gt; class MyString ...

Свой контейнерный класс - C++
Господа, помогите пожалуйста написать прогу. сама вообще не справляюсь: шаблоны и контейнеры понимаю с пятого на десятое. задание:...

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

Создать свой класс - C++
сижу книжку читаю (уже пару недель), там по чуть-чуть все время про классы (в каждой главе) рассказывают, а как полностью сконструировать...

Динамическая память, свой класс - C++
Есть свой класс. Пусть будет Class. У него есть потомки. SubClassA и SubClassB. Необходимо динамически выделить массив указателей на...

Возможно ли написать свой класс 2д графики? - C++
Возможно ли написать свой класс 2д графики? Скажесм, который будет хронить х, у pixel-я, цвет pixel-я, массив растов pixel-ов и т.д. Ну и...

Написал свой string. Проверьте код на наличие подводных камней, утечек памяти и других ошибок - C++
Сделал класс, который ведет себя аналогично char*, но с возможностью сложения строк. Вроде все работает как надо, но есть ли какие-то...

Как свой класс реализовать через формы - C++
Добрый день. Только начал изучать ГУИ на С++. Использовал вот этот гайд http://code-live.ru/post/first-windows-form/ Здесь...

Пишем свой класс, спецификатор доступа protected - C++
Всем привет! Из книги Р. Лафоре относительно спецификатора доступа protected: Далее пишется следующее: Возникает вопросы:...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vndtta
81 / 58 / 6
Регистрация: 17.10.2011
Сообщений: 184
Завершенные тесты: 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
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.10.2011, 14:43     Свой класс string #3
Цитата Сообщение от vndtta Посмотреть сообщение
в конструкторе char *c="" присваивается адрес временного объекта
Не в этом дело, тут всё нормально.

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

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

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

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

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

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