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

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

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

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

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

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

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

Здравствуйте! Создал класс std::string. Не создается объкт типа string... Подскажите в чем причина? - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; //using namespace std; class string { private: int...

Реализовать пользовательские типы: класс Person и класс String - C++
1)Разработать класс Person, который содержит соответствующие члены для хранения: имени, возраста, пола и телефонного номера. ...

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

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

5
vndtta
90 / 67 / 13
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
27.10.2011, 14:22 #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="" присваивается адрес временного объекта
0
silent_1991
Эксперт С++
4985 / 3042 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
27.10.2011, 14:43 #3
Цитата Сообщение от vndtta Посмотреть сообщение
в конструкторе char *c="" присваивается адрес временного объекта
Не в этом дело, тут всё нормально.

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

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

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

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

спасибо всем!
0
27.10.2011, 15:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2011, 15:17
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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