Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
1

Реализация класса String

27.07.2015, 21:08. Показов 4078. Ответов 4

Доброго времени суток! Пишу свой класс String (учусь). И возник вопрос по реализации.

Имеется определение класса:
C++
1
2
3
4
5
6
7
8
9
class String
{
private:
    char* str;
    int len;
public:
    String(const char* s = "");
    ~String();
};
Конструктор и деструктор соответственно :
C++
1
2
3
4
5
6
7
8
9
10
11
String::String(const char *s)
{
    str = new char[strlen(s)+1];
    strcpy(str, s);
    len = strlen(s);
}
 
String::~String()
{
    delete [] str;
}
Меня смущает такой момент - я хочу, чтобы по умолчанию моя строка была пустая. Так оно и есть. Но в тоже самое время для изменения строки этого обьекта каким-то другим методом мне придётся лишний раз писать delete [] str, чтобы не было утечки.

Это можно решить, делая по умолчанию str = nullptr, но тогда строка не ведёт себя, как пустая.

Вопрос : как мне сделать так, чтобы конструктор по умолчанию использовал nullptr для обнуления char* str и при этом такой обьект вёл себя как пустая строка?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2015, 21:08
Ответы с готовыми решениями:

где РЕАЛИЗАЦИЯ класса string?
объявление нашёл, а реализацию нет..

Реализация оператора [] для самописного класса String
Доброго времени суток. Пытаюсь написать самописный класс String. Вот что уже готово: struct...

Реализация класса MyString. Стандартная библиотека, std::string, std::vector
как добавить реализацию конкатенации строк через перегрузку оператора "+=" в классе MyString и...

Реализация класса на базе класса Stack с возможностью !индексирования!
Помогите пожалуйста!!! Нужно реализовать на базе класса stack другой класс с возможностью...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
4
lss
935 / 863 / 356
Регистрация: 10.10.2012
Сообщений: 2,706
27.07.2015, 21:25 2
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Вопрос : как мне сделать так, чтобы конструктор по умолчанию использовал nullptr для обнуления char* str и при этом такой обьект вёл себя как пустая строка?
Никак. Чтобы строка вела себя как пустая, под '\0' нужно выделить память, значит потом нужно будет её освобождать.
1
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
27.07.2015, 21:31  [ТС] 3
Это да. Я понимаю. Но может какой изящный трюк для таких случаев имеется?
0
2712 / 1879 / 556
Регистрация: 05.06.2014
Сообщений: 5,459
27.07.2015, 21:32 4
Лучший ответ Сообщение было отмечено ZaMaZaN4iK как решение

Решение

C++
1
const char*c_str()const{return str?str:"";}
1
Мой лучший друг-отладчик!
165 / 165 / 30
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
27.07.2015, 21:46  [ТС] 5
Renji, да. Наверное это именно то, что мне надо. Спасибо!

Добавлено через 8 минут
Может ещё какие способы есть?

Добавлено через 12 секунд
Может ещё какие способы есть?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2015, 21:46

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Реализация IEquatable<string[]> для класса идентификаторов
Есть класс, наподобие GUID. Генерирующий идентификаторы вот такого плана (ab3c-lkjs-5fhg-9g88)....

Реализация интерфейса IEqualityComparer для HashSet<Dictionary<string, string>>
Код выдает &quot;2&quot;, что, логично, а хотелось бы, чтобы выдавал &quot;1&quot;, так как содержание словарей...

Реализация работы с классами, конструктор, методы класса и переменные класса
Всем привет, решил изучать Java. Нашел прикольное задание : Реализовать класс, представляющий...

Реализация класса с свойствами - ссылками на объекты класса
Всем привет, пожалуйста подскажите реализацию такой интересной вещи, что написана в заголовке. Вот...


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

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

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