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?

È stato utile?

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!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top