C++ Functie Overschrijven
C++ Functie Overschrijven
In deze tutorial zullen we met behulp van voorbeelden leren over het overschrijven van functies in C++.
Zoals we weten, is overerving een functie van OOP waarmee we afgeleide klassen kunnen maken van een basisklasse. De afgeleide klassen nemen kenmerken van de basisklasse over.
Stel dat dezelfde functie is gedefinieerd in zowel de afgeleide klasse als de gebaseerde klasse. Als we deze functie nu aanroepen met het object van de afgeleide klasse, wordt de functie van de afgeleide klasse uitgevoerd.
Dit staat bekend als functieoverschrijving in C++. De functie in de afgeleide klasse overschrijft de functie in de basisklasse.
Voorbeeld 1:C++ Functie Overschrijven
// C++ program to demonstrate function overriding
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived derived1;
derived1.print();
return 0;
}
Uitvoer
Derived Function
Hier dezelfde functie print()
is gedefinieerd in beide Base
en Derived
lessen.
Dus als we print()
. aanroepen van de Derived
object afgeleid1 , de print()
vanaf Derived
wordt uitgevoerd door de functie in Base
. te overschrijven .
Zoals we kunnen zien, is de functie overschreven omdat we de functie hebben aangeroepen vanuit een object van de Derived
klasse.
Hadden we de print()
. gebeld functie van een object van de Base
class, zou de functie niet overschreven zijn.
// Call function of Base class
Base base1;
base1.print(); // Output: Base Function
Toegang overschreven functie in C++
Om toegang te krijgen tot de overschreven functie van de basisklasse, gebruiken we de scope resolutie-operator ::
.
We kunnen ook toegang krijgen tot de overschreven functie door een aanwijzer van de basisklasse te gebruiken om naar een object van de afgeleide klasse te verwijzen en vervolgens de functie vanaf die aanwijzer aan te roepen.
Voorbeeld 2:C++ Toegang overschreven functie tot de basisklasse
// C++ program to access overridden function
// in main() using the scope resolution operator ::
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived derived1, derived2;
derived1.print();
// access print() function of the Base class
derived2.Base::print();
return 0;
}
Uitvoer
Derived Function Base Function
Hier, deze verklaring
derived2.Base::print();
geeft toegang tot de print()
functie van de basisklasse.
Voorbeeld 3:C++ Call Overridden-functie van afgeleide klasse
// C++ program to call the overridden function
// from a member function of the derived class
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
// call overridden function
Base::print();
}
};
int main() {
Derived derived1;
derived1.print();
return 0;
}
Uitvoer
Derived Function Base Function
In dit programma hebben we de overschreven functie binnen de Derived
. aangeroepen klasse zelf.
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
Base::print();
}
};
Let op de code Base::print();
, die de overschreven functie binnen de Derived
. aanroept klasse.
Voorbeeld 4:C++ Call Overridden-functie met aanwijzer
// C++ program to access overridden function using pointer
// of Base type that points to an object of Derived class
#include <iostream>
using namespace std;
class Base {
public:
void print() {
cout << "Base Function" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
}
};
int main() {
Derived derived1;
// pointer of Base type that points to derived1
Base* ptr = &derived1;
// call function of Base class using ptr
ptr->print();
return 0;
}
Uitvoer
Base Function
In dit programma hebben we een pointer gemaakt van Base
type met de naam ptr . Deze aanwijzer wijst naar de Derived
object afgeleid1 .
// pointer of Base type that points to derived1
Base* ptr = &derived1;
Wanneer we de print()
. noemen functie met behulp van ptr , roept het de overschreven functie aan van Base
.
// call function of Base class using ptr
ptr->print();
Dit komt omdat, hoewel ptr wijst naar een Derived
object, het is eigenlijk van Base
type. Het roept dus de lidfunctie van Base
. aan .
Om de Base
. te overschrijven functie in plaats van er toegang toe te krijgen, moeten we virtuele functies gebruiken in de Base
klasse.
C Taal