C ++ - funktion tilsidesat

I denne vejledning lærer vi om tilsidesættelse af funktioner i C ++ ved hjælp af eksempler.

Som vi ved, er arv en funktion af OOP, der giver os mulighed for at oprette afledte klasser fra en basisklasse. De afledte klasser arver træk ved baseklassen.

Antag, at den samme funktion er defineret i både den afledte klasse og den baserede klasse. Hvis vi nu kalder denne funktion ved hjælp af objektet fra den afledte klasse, udføres funktionen for den afledte klasse.

Dette er kendt som funktionsoverstyring i C ++. Funktionen i afledt klasse tilsidesætter funktionen i basisklassen.

Eksempel 1: C ++ - funktion tilsidesat

 // C++ program to demonstrate function overriding #include 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; )

Produktion

 Afledt funktion

Her er den samme funktion print()defineret i begge Baseog Derivedklasser.

Så når vi kalder print()fra Derivedobjektet derived1, den print()fra Derivedeksekveres i tvingende funktionen i Base.

Funktion af tilsidesættelse af funktion i C ++

Adgang Overridden-funktion i C ++

For at få adgang til basisklassens tilsidesatte funktion bruger vi omfangsopløsningsoperatoren ::.

Vi kan også få adgang til den tilsidesatte funktion ved at bruge en markør i basisklassen til at pege på et objekt fra den afledte klasse og derefter kalde funktionen fra den pågældende markør.

Eksempel 2: C ++ adgangsstyret funktion til basisklassen

 // C++ program to access overridden function // in main() using the scope resolution operator :: #include 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; )

Produktion

 Afledt funktion Basisfunktion

Her denne erklæring

 derived2.Base::print();

får adgang til baseklassens print()funktion.

Få adgang til tilsidesat funktion ved hjælp af objekt fra afledt klasse i C ++

Eksempel 3: C ++ Opkaldsstyret funktion fra afledt klasse

 // C++ program to call the overridden function // from a member function of the derived class #include 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; )

Produktion

 Afledt funktion Basisfunktion

I dette program har vi kaldt den tilsidesatte funktion inde i selve Derivedklassen.

 class Derived : public Base ( public: void print() ( cout << "Derived Function" << endl; Base::print(); ) );

Bemærk koden Base::print();, der kalder den tilsidesatte funktion inde i Derivedklassen.

Adgangsoverstyret funktion inden for afledt klasse i C ++

Eksempel 4: C ++ Opkaldsstyret funktion ved hjælp af pointer

 // C++ program to access overridden function using pointer // of Base type that points to an object of Derived class #include using namespace std; class Base ( public: void print() ( cout << "Base Function" << endl; ) ); class Derived : public Base ( public: void print() ( cout << "Derived Function" 

Output

 Base Function

In this program, we have created a pointer of Base type named ptr. This pointer points to the Derived object derived1.

 // pointer of Base type that points to derived1 Base* ptr = &derived1;

When we call the print() function using ptr, it calls the overridden function from Base.

 // call function of Base class using ptr ptr->print();

This is because even though ptr points to a Derived object, it is actually of Base type. So, it calls the member function of Base.

In order to override the Base function instead of accessing it, we need to use virtual functions in the Base class.

Interessante artikler...