|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.04.2013, 00:03 | #1 |
Форумчанин
Регистрация: 11.02.2011
Сообщений: 131
|
Переопределение операторов, создание собственного класса String
Дали задание создать собственный класс String. Вот то, что написалось:
Код:
Последний раз редактировалось БалаШагаЛ; 04.04.2013 в 00:12. Причина: Обновление исходного кода |
04.04.2013, 02:28 | #2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Код:
Код:
Далее, когда у первой строки закончится срок жизни, она сделает: Код:
Код:
/зы: велосипед ужассен. Во первых он ни разу не соответствует с++ way Класс не соответствует утиной нотации STL Во-вторых, требует подключать файлы стандартной библиотеки. В третьих, и это самый главный твой минус - нарушение инварианта класса. Твой класс никак не оберегает собственные данные от повреждений дураком. Отсутствие const-наци, излишки в интерфейсе сразу выдает дилетанта. Например: Код:
Классу не нужны методы, которые дублируют функционал друг друга. Другой пример: Код:
И даже промолчу, что проще вообще отказаться от такого класса, и напрямую пользовать си-библиотеку. Совсем промолчу: а начерта мне такой класс, если он итак тянет за собой #include<string.h> Однако, ответь мне на вопрос: Почему твоя функция возвращает int? У тебя что, длина строки может быть отрицательной??? Как длина строки может быть отрицательная? Когда ты используешь чужой функционал, ты вообще смотришь, как с ним работать? Ты использовал библиотечную: Код:
Ты понимаешь, что ты приводишь беззнаковый тип к знаковому? Ты вообще головой думал, когда писал такое? А это что такое? Код:
Короче - сыро. |
04.04.2013, 07:02 | #3 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,691
|
Код:
sprintf - самый медленный и ужасный вариант копирования строк. Можно воспользоваться тем же memcpy и переписать SetString следующим образом: Код:
Код:
Длина строки: Код:
Код:
Цитата:
Цитата:
|
||
04.04.2013, 11:00 | #4 |
Старожил
Регистрация: 25.10.2011
Сообщений: 3,178
|
Код:
S.GetString может вернуть NULL, R.AddString(NULL) в его нынешней реализации приведёт к отказу приложения. Код:
Код:
Принято, чтобы операторы = и += возвращали константную ссылку на результат присвоения. Это позволяет писать, аналогично стандартным типам: Код:
Последний раз редактировалось Abstraction; 04.04.2013 в 11:05. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Переопределение класса у объекта | java91 | Общие вопросы C/C++ | 1 | 20.01.2013 18:51 |
Использование собственного класса в Windows Forms | fredwriter | Помощь студентам | 3 | 21.09.2012 18:18 |
Переопределение конструктора класса | RFbager | Общие вопросы C/C++ | 2 | 12.11.2010 14:17 |
Создание собственного класса. Который считает время(нужен секундамер) и имеет массив данных int | ciberlex404 | Общие вопросы C/C++ | 0 | 04.06.2010 20:12 |
Разработка собственного класса | 1ntro | Общие вопросы C/C++ | 3 | 16.12.2007 14:54 |