Ho una domanda sullo stile. Ho una classe (nel mio caso un'opzione) che dipende dal valore di un oggetto esogeno (tasso di interesse). Il mio obiettivo è creare una classe base astratta per l'oggetto esogeno (Rate) in modo da poter costruire variazioni, ad esempio SimulatedRate o ConstantRate, che funzioneranno all'interno della mia classe, Option.C++: una classe astratta come membro
Tuttavia, sto trovando in C++, poiché ovviamente non posso creare un'istanza di una classe base astratta, devo memorizzare un puntatore o un riferimento alla classe base. La mia preoccupazione è che quando gli oggetti esogeni istanziati escono dall'ambito al di fuori della classe dipendente, la mia classe dipendente punta alla spazzatura.
Esiste un modo ragionevole per utilizzare il polimorfismo per questo problema in C++?
mio codice corrente:
class Dependent
{
public:
Dependent(const Exogenous& exo) : exo_(exo) {}
double getSomething() const { exo_.interfaceMethod(); }
private:
Exogenous& exo_;
}
class Exogenous
{
public:
virtual double interfaceMethod() const=0;
}
class ExogenousVariationA
{
public:
virtual double interfaceMethod() const { return resultA; }
}
class ExogenousVariationB
{
public:
virtual double interfaceMethod() const { return resultB; }
}
Shall 'Dependent' necessariamente mantenere un riferimento a' Exogenous', o può derivare da esso? Vale a dire. Devi istanziare entrambe le classi separatamente? – didierc
In primo luogo, gli oggetti polimorfici sono sempre trattenuti dal puntatore/riferimento. Anche in altre lingue come Java questo è il caso. In secondo luogo, poiché si tratta di C++, è necessario utilizzare sempre la corretta gestione degli oggetti C++/RAII, che per puntatori indica puntatori intelligenti. – bames53