class BaseClass {...}
class ChildA:BaseClass {...}
class ChildB:BaseClass {...}
...
Как лучше?
так:
void AnotherClass::func(BaseClass object) {
doCommonStuff1
if (objectInstanceOfChildA) {
doSpecificStuffA1
}
else if(objectInstanceOfChildB) {
dospecificStuffB1
}
else ...
doCommonStuff2
if (objectInstanceOfChildA) {
doSpecificStuffA2
}
else if(objectInstanceOfChildB) {
dospecificStuffB2
}
else ...
...
}
или так:
void AnotherClass::func(ChildA object) {
doCommonStuff1
doSpecificStuffA1
doCommonStuff2
doSpecificStuffA2
...
}
void AnotherClass::func(ChildB object) {
doCommonStuff1
doSpecificStuffB1
doCommonStuff2
doSpecificStuffB2
...
}
...
В первом случае имеем "кашу". Таким кодом только ночью на улицах пугать.
Во втором случае каждый метод достаточно читабелен, но имеет место повторное использование кода. (Запихать общие блоки для различных классов в отдельные методы не представляется возможным, из-за их маленького размера)
Какой бы вариант предпочли вы?
1) Вариант1
2) Вариант2
3) Оба варианта отстой (+ свой вариант в студию)
Здравствуйте, Maraba, Вы писали:
M>Во втором случае каждый метод достаточно читабелен, но имеет место повторное использование кода. (Запихать общие блоки для различных классов в отдельные методы не представляется возможным, из-за их маленького размера)
M>Какой бы вариант предпочли вы?
M>1) Вариант1
M>2) Вариант2
M>3) Оба варианта отстой (+ свой вариант в студию)
Лучше постараться вынести специфическую функциональность в классы ChildA и ChildB с соответсвующими абстрактным методом в BaseClass и вызывать функцию
void AnotherClass::func(BaseClass object) {
doCommonStuff1
object.doSpecificStuff1;
doCommonStaff2
object.doSpecificStuff2;
}
Понятно, что это возможно далеко не всегда. В общем случае зависит от задачи. Думаю, если расскажете какая у вас конкретно задача, можно будет получить гораздо более конкретные ответы.
M>В первом случае имеем "кашу". Таким кодом только ночью на улицах пугать.
M>Во втором случае каждый метод достаточно читабелен, но имеет место повторное использование кода. (Запихать общие блоки для различных классов в отдельные методы не представляется возможным, из-за их маленького размера)
Если уж спрашиваете как лучше, то лучше не полениться и запихать