2016-03-08 3 views
1

У меня вопрос:qt C++ новый подобный метод. Могу ли я перегружать метод, писать новый метод или использовать параметр по умолчанию?

У меня есть огромная программа на C++, которую я должен адаптировать к новым потребностям. В программе у меня есть существующий метод, который используется около 20 раз в моем коде

void doSomething(); 

Теперь мне нужно использовать очень похожий новый метод в моей программе (использовать один или два раза). Этот новый метод должен делатьSomethingSimilar, когда установлен флаг. У меня есть несколько идей, как это кодировать. Есть ли лучшее решение/стиль для этого?

Идея 1: Напишите другой метод, который почти такой же, как doSomething(). Но это означает дублирование кода.

void doSomethingElse(); 

Идея 2: перегружать мой метод (но по-прежнему дублировать код)

void doSomething(bool myFlag); 

Идея 3: параметры использования по умолчанию и включают в себя Условный оператор в старом методе DoSomething ().

void doSomething(bool myFlag=false); 

Есть ли лучшее решение для этого? Или еще лучшее решение?

Благодарим вас

Merchaldes

+0

Это общий вопрос типа OO/Architecture/C++ Style, и лучший ответ - это бит зависимости от контекста/среды, которого нет в этом вопросе. Предложите получить некоторые книги на C++, которые вникают в программирование на C++, например, Scott Meyers, или ищут сеть для такого рода обсуждений. – CarlH

+0

Дублирование кода не обязательно плохое - это зависит от намерения кода. То есть, если X и Y одинаковы и всегда и всегда должны быть одинаковыми, независимо от содержимого X и Y, то это, вероятно, плохое дублирование. Если код по совпадению дублируется - X и Y просто оказываются одинаковыми * прямо сейчас * - тогда дублирование кода может быть лучшим решением. Преждевременно «недуплифицированный» («DRIED»?) Код может быть беспорядочным, чтобы распутать. – molbdnilo

ответ

2

Раздельные общую часть (ы) старого метода в частном/защищенный метод (ы) хелперов. Затем напишите два своих общих метода, чтобы они вызывали вспомогательный метод (ы).

Итак, в основном ваш вариант 1, за исключением того, что не дублирует код. Или, возможно, вариант 2, если имеет смысл перегрузить вместо введения нового имени метода (в этом случае см. Ниже).

Использование методов, названных по-разному, явно о том, что делает каждый вызов, потому что имя метода говорит напрямую, без необходимости проверять, что на самом деле означает отсутствие/true/false arg. Но если вы хотите сделать это с необязательным аргументом arg и единственным методом (как минимум, в публичных и защищенных интерфейсах), лучше объявить перечисление, которое имеет описательные имена значений (также, если вам нужно третье значение, его легко добавить, в отличие от булевых). Это то, что Qt обычно делает (example).

0

Вы можете передать отдельные части частным вспомогательным функциям. Затем перегрузите свою функцию необходимыми параметрами.