Introduzione alla parola chiave virtuale in C ++

Una parola chiave virtuale in C ++ viene utilizzata per creare una funzione virtuale in C ++. La funzione virtuale è la funzione della classe genitore che vogliamo ridefinire nella classe figlio. La funzione virtuale viene dichiarata utilizzando la parola chiave virtuale. Quando definiamo la funzione virtuale, la parola chiave virtual deve procedere nella dichiarazione della funzione. La parola chiave virtuale indica al compilatore di eseguire l'associazione tardiva o il collegamento dinamico sulla funzione.

Il singolo puntatore è necessario per fare riferimento a tutti gli oggetti di classi diverse. Pertanto, il puntatore viene creato sulla superclasse per fare riferimento a tutti gli oggetti della classe derivata e quindi il puntatore della superclasse contiene l'indirizzo dell'oggetto della classe derivata che esegue sempre la funzione superclasse. Quindi, per risolvere questo problema, utilizziamo la funzione virtuale. Quindi, quando la funzione virtuale viene creata nella superclasse, il compilatore C ++ identifica quale funzione deve essere eseguita in fase di esecuzione e l'identificazione della funzione prende in base al tipo di oggetto puntato dal puntatore della superclasse.

Funzione virtuale

Le funzioni virtuali della sintassi sono riportate di seguito:

Sintassi

class name_class
(
public :
virtual return fun(arg1, arg2, ..)
(
//code inside the function
)
)

Come nella sintassi, fun () dichiara la parola chiave virtuale, il che significa che la classe figlio può ridefinire gli stessi metodi.

Programma 1:

#include
using namespace std;
class A
(
public:
void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Late Binding Occurs
)

Produzione:

Nel programma sopra la superclasse A con la funzione disp (), che viene riscritta nella classe derivata B. Nella funzione principale il metodo disp () chiama l'oggetto obj1 (che è un legame dinamico o un legame tardivo. è un processo in cui viene eseguita la funzione specifica da eseguire in fase di esecuzione) e viene eseguita la funzione disp () di classe A.

Programma 2:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A \n ";
)
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Produzione:

Il codice di programma sopra è l'alterazione del programma 1, la funzione disp () è definita con la parola chiave virtual e ora quando obj1 chiama la funzione disp (), viene eseguita la funzione disp () della classe figlio B.

Programma 3:

#include
using namespace std;
class A
(
public:
virtual void disp()
(
cout << " Message from the class A\n ";
)
);
class B :public A
(
public:
virtual void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Produzione:

Il codice di programma sopra è l'alterazione del programma 2, la funzione disp () che si sta anche ridefinendo con la parola chiave virtuale in classe B e ora quando l'obj1 chiama la funzione disp (), la funzione disp () della classe figlio B viene eseguito.

Successivamente, scriviamo il programma per la pura funzione virtuale. La pura funzione virtuale è una funzione per la quale don non aveva implementazioni. La pura funzione virtuale è anche chiamata una funzione virtuale astratta. La dichiarazione di funzione virtuale pura assegna 0, come mostrato nel codice seguente -

Programma 4:

#include
using namespace std;
class A
(
public:
virtual void disp()=0;
);
class B :public A
(
public:
void disp()
(
cout << "Message from the class B\n";
)
);
int main()
(
A* obj1; // super class pointer
B obj2; // child class object
obj1 = &obj2;
obj1-> disp(); // Dynamic Binding Ocuurs
)

Produzione:

Vantaggi della parola chiave virtuale in C ++

  • Le funzioni virtuali vengono utilizzate per ottenere il polimorfismo di runtime.
  • Se una classe deriva da una classe con una funzione virtuale, la definizione della funzione può essere ridefinita nella classe derivata.

Regole di parole chiave virtuali in C ++

  • La parola chiave virtuale in C ++ viene utilizzata nella dichiarazione di funzione.
  • Le funzioni virtuali devono essere membri della classe.
  • Accesso alla funzione virtuale tramite puntatori a oggetti.
  • La funzione virtuale non può essere dichiarata come statica.
  • La funzione virtuale può essere amici di un'altra classe.
  • Se la funzione virtuale non viene utilizzata nella superclasse, è possibile definirla anche nella superclasse.
  • La firma di una funzione virtuale della superclasse e delle classi figlio dovrebbe essere la stessa, la cosiddetta funzione override, altrimenti se le due funzioni con lo stesso nome ma firma diversa, vengono considerate come funzioni sovraccaricate in C ++.
  • Possiamo avere un distruttore virtuale ma non un costruttore virtuale.

Conclusione

  • Una parola chiave virtuale in C ++ viene utilizzata per creare una funzione virtuale in C ++.
  • La funzione virtuale è la funzione della classe genitore che vogliamo ridefinire nella classe figlio.
  • Il singolo puntatore è necessario per fare riferimento a tutti gli oggetti di classi diverse.
  • Il puntatore superclasse contiene l'indirizzo dell'oggetto della classe derivata che esegue sempre la funzione superclasse.
  • Le funzioni virtuali devono essere membri di classe, devono essere membri di classe, non possono essere dichiarati come statici, accessibili tramite puntatori a oggetti.
  • La firma di una funzione virtuale della superclasse e delle classi figlio dovrebbe essere la stessa, la cosiddetta funzione override, altrimenti se le due funzioni con lo stesso nome ma firma diversa, vengono considerate come funzioni di sovraccarico in C ++.

Articoli consigliati

Questa è una guida alla parola chiave virtuale in C ++. Qui discutiamo l'introduzione e i vantaggi della parola chiave virtuale in C ++ insieme alla sua sintassi della funzione virtuale. Puoi anche consultare i nostri altri articoli suggeriti per saperne di più -

  1. Sostituzione del metodo in C #
  2. Eredità in C #
  3. Comandi C #
  4. Comandi Java
  5. Sostituzione in Java
  6. Polimorfismo in Java
  7. Principali 11 caratteristiche e vantaggi di C ++

Categoria: