C ++ - funktion åsidosättande

I den här handledningen kommer vi att lära oss om funktionsstyrning i C ++ med hjälp av exempel.

Som vi vet är arv en funktion i OOP som låter oss skapa härledda klasser från en basklass. De härledda klasserna ärver funktioner i basklassen.

Antag att samma funktion definieras i både den härledda klassen och den baserade klassen. Om vi ​​nu kallar den här funktionen med hjälp av objektet för den härledda klassen, utförs funktionen för den härledda klassen.

Detta är känt som funktionen åsidosättande i C ++. Funktionen i härledd klass åsidosätter funktionen i basklassen.

Exempel 1: C ++ - funktionen åsidosättande

 // 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

 Deriverad funktion

Här print()definieras samma funktion i båda Baseoch Derivedklasserna.

Så, när vi anropar print()från Derivedobjektet derivat1, körs det print()från Derivedgenom att åsidosätta funktionen i Base.

Funktion av funktion som åsidosätter i C ++

Åtkomst överstyrd funktion i C ++

För att komma åt basklassens åsidosatta funktion använder vi operatören för omfångsupplösning ::.

Vi kan också komma åt den åsidosatta funktionen genom att använda en pekare i basklassen för att peka på ett objekt från den härledda klassen och sedan anropa funktionen från den pekaren.

Exempel 2: C ++ Åtkomstöverskridande funktion till basklassen

 // 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

 Deriverad funktion Basfunktion

Här, detta uttalande

 derived2.Base::print();

får åtkomst till basklassens print()funktion.

Åtkomst åsidosatt funktion med objekt från härledd klass i C ++

Exempel 3: C ++ samtalsöverskridande funktion från härledd klass

 // 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

 Deriverad funktion Basfunktion

I det här programmet har vi kallat den åsidosatta funktionen i själva Derivedklassen.

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

Lägg märke till koden Base::print();som kallar den åsidosatta funktionen i Derivedklassen.

Åtkomst åsidosatt funktion i härledd klass i C ++

Exempel 4: C ++ samtalsöverskridande funktion med hjälp av pekaren

 // 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.

Intressanta artiklar...