Derivando una classe da una classe astratta (C ++)
-
22-09-2019 - |
Domanda
Ho una classe astratta con una pura funzione f (Virtual) e voglio creare una classe ereditata da quella classe, e anche l'override funzione f (). Ho separato il file di intestazione e il file cpp. Ho dichiarato la funzione f (int) nel file di intestazione e la definizione è nel file cpp. Tuttavia, il compilatore dice che la classe derivata è ancora astratta. Come posso risolvere il problema?
Soluzione
Le funzioni f () ef (int) non hanno la stessa firma, quindi il secondo non fornirebbe un'implementazione per primo. Le firme del PVF e l'implementazione devono corrispondere esattamente.
Altri suggerimenti
Si sta dichiarando f (int) nella classe di base come puro virtuale o f ()?
funzioni virtuali pure possono hanno definizioni all'interno della loro classe di base. Una funzione virtuale pura dice semplicemente che il tipo derivato deve anche specificare le proprie implementazioni della funzione f (int).
class Base
{
public:
virtual void f(int) = 0;
}
Base::f(int)
{
//some code
}
class Derived : public Base
{
public:
virtual void f(int)
{//Implementation is needed in Derived since f(int) is pure virtual
}
}
Cosa succede ad usare i modelli C ++?
template<typename T>
class Basic{
public:
void f(T);
};
template<typename T>
Basic<T>::f(T t){
//Do something generic here
}
È possibile utilizzare modello di specializzazione se la funzione f ha bisogno di fare qualcosa di diverso quando si tratta di parametro è un tipo specifico. Userò stringa in questo esempio.
template<>
class Basic<string>{
public:
void f(string);
};
template<>
Basic<string>::f(string t){
//Do your special thing with a string
}
Spero che questo aiuti!