scusa se il titolo è un po 'confuso ma non ero sicuro di come formulare la mia domanda. Quindi ho alcune classi che ho usato per un progetto che sto cercando di rendere più generale in modo che io possa riutilizzarle per altri progetti. L'idea era di spostare tutto il codice che è univoco per il progetto corrente in una sottoclasse della classe originale. Ciò ha funzionato bene per la maggior parte delle parti poiché il modo più comune di eseguire una funzione era che il comportamento generale era il primo nella funzione e che il comportamento specifico del programma è durato. Quindi nella mia nuova soluzione chiamo semplicemente la funzione della classe base dalla sottoclasse e poi faccio il codice specifico del programma o viceversa. Ad esempio questo:
void ParentClass::doStuff()
{
doGeneralStuff();
doprogramSpecificStuff();
}
Diventerebbe questo:
void ParentClass::doStuff()
{
doGeneralStuff();
}
void SubClass::doStuff()
{
ParentClass::doStuff();
doProgramSpecificStuff();
}
Il problema sorge quando ho una funzione simile a questa:
void ParentClass::doOtherStuff()
{
doOtherGeneralStuff();
if (condition) {
doEvenMoreGeneralStuff();
doMoreProgramSpecificStuff();
}
doTheLastGeneralStuff();
}
Ora il codice specifico del programma si trova nel mezzo della funzione. Un modo per risolverlo sarebbe semplicemente copiare l'intera funzione nella sottoclasse e rimuovere la linea specifica del programma dal genitore. Ma poi finirei con il codice pubblicizzato e se dovessi cambiare il comportamento del mio programma lungo la linea che potrebbe diventare un problema. Immagino che un altro modo per risolverlo sia chiamare una funzione della classe genitore che è vuota ma che può essere sovrascritta in una sottoclasse se desidera fare qualcosa in quel punto del programma. Ma anche questo sembra un po 'brutto finisco con un sacco di sottoclassi che hanno bisogno di fare cose del genere. Quindi finirei con un sacco di chiamate di funzioni appena vuote.
Qualche consiglio su come risolvere questo problema?