Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
go100gi
1 / 1 / 0
Регистрация: 31.07.2013
Сообщений: 31
Завершенные тесты: 1
#1

Повторное использование кода

09.09.2016, 21:04. Просмотров 318. Ответов 8
Метки нет (Все метки)

Предположим для класса перегружен oператор+ который принимает либо строку в стиле С, или такой же объект.


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
myString myString::operator+(const char * _str) const
{
    myString tempObj;
    tempObj.len = len + strlen(_str);
    tempObj.str = new char[tempObj.len + 1];
    tempObj.str[0] = '\0';
 
    strcat(tempObj.str, str);
    strcat(tempObj.str, _str);
 
    return tempObj;
}
 
myString myString::operator+(const myString & obj) const
{
    myString tempObj;
    tempObj.len = len + obj.len;
    tempObj.str = new char[tempObj.len + 1];
    tempObj.str[0] = '\0';
 
    strcat(tempObj.str, str);
    strcat(tempObj.str, obj.str);
 
    return tempObj;
}
Как видите код почти повторяется, как реализовать без повторения кода?
условие: нельзя помещать код в отдельную функцию а затем вызывать ее.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.09.2016, 21:04
Ответы с готовыми решениями:

Повторное использование кода в C++
Всем доброго дня! Прошу помочь начинающему. В данный момент обучаюсь по книге...

Как не допустить повторное использование кода
Здравствуйте. У меня есть один заголовочный файл, и в нем присутствует пара...

Повторное использование кода и инкапсулирование. Внимание, много букв)
Всем привет. Хотелось бы обсудить очень важный вопрос, а именно инкапсуляцию...

Повторное выполнение кода
Только на прошлом уроке прошли 3 цикла, сказали сделать задачу-Дан числовой...

Повторное выполнение кода
Здравствуйте! Ребята как я могу сделать так чтобы эта программа т.е...

8
DU3
281 / 233 / 115
Регистрация: 07.09.2016
Сообщений: 587
09.09.2016, 21:43 #2
C++
1
2
3
4
5
6
7
8
9
myString myString::operator+(const char * _str) const
{
  ... // без изменений
}
 
myString myString::operator+(const myString & obj) const
{
    return (*this) + obj.str;
}
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.09.2016, 21:59 #3
Цитата Сообщение от go100gi Посмотреть сообщение
условие: нельзя помещать код в отдельную функцию а затем вызывать ее.
а чего вы нам условия ставите?(

Добавлено через 1 минуту
DU3, и работать будет пока в Foo только 1 переменная str
0
hoggy
Заблокирован
09.09.2016, 22:02 #4
Цитата Сообщение от go100gi Посмотреть сообщение
myString myString::operator+(const char * _str) const
C++
1
2
3
4
5
myString myString::operator+(const char * _str) const
{ /* trololo */ }
 
myString myString::operator+(const myString & obj) const
{ this->operator+(obj.c_str()); }
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.09.2016, 22:04 #5
hoggy, даже не смотря на return'ы - такой код не расширяемый - или я не прав?
0
DU3
281 / 233 / 115
Регистрация: 07.09.2016
Сообщений: 587
09.09.2016, 22:20 #6
я не понял ни одного вопроса. ни про фоо, ни про расширябельность.
0
hoggy
Заблокирован
09.09.2016, 22:29 #7
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
даже не смотря на return'ы - такой код не расширяемый - или я не прав?
return я прошляпил

а в остальном - какая здесь вообще может понадобится расширяемость?
и потом, если понадобится, ничто не мешает её вкрячить.
0
rikimaru2013
C++ Game Dev
2471 / 1140 / 348
Регистрация: 30.11.2013
Сообщений: 3,709
09.09.2016, 22:38 #8
hoggy, А насчёт вкрячить - все равно надо будет отдельный private метод - copyStr() если не std::string ) Что я и пытаюсь донести до ТСа)
0
hoggy
Заблокирован
09.09.2016, 23:15 #9
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А насчёт вкрячить - все равно надо будет отдельный private метод
строго говоря, это не обязательно (см условия ТС).
однако, лично я всегда выношу специфик из паблика.
так код становится проще, гибче, и тп.
1
09.09.2016, 23:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2016, 23:15

Оптимизация кода с использование SIMD
Есть код inline double dot(const float* v1, const float* v2) { return...

Использование кода символа внутри строки?
Как должна выглядеть стока, содержащая символ с определённым кодом? Можно как...

Использование dll без оригинального кода
Добрый день. Имею следующую проблему: Есть библиотека dll без оригинального...


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

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

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