Sobreposição de função C++
Substituição de função C++
Neste tutorial, aprenderemos sobre substituição de função em C++ com a ajuda de exemplos.
Como sabemos, herança é um recurso de POO que nos permite criar classes derivadas de uma classe base. As classes derivadas herdam recursos da classe base.
Suponha que a mesma função seja definida na classe derivada e na classe baseada. Agora, se chamarmos essa função usando o objeto da classe derivada, a função da classe derivada será executada.
Isso é conhecido como substituição de função em C++. A função na classe derivada substitui a função na classe base.
Exemplo 1:substituição de função C++
// 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;
}
Saída
Derived Function
Aqui, a mesma função
print()
é definido em ambos Base
e Derived
Aulas. Então, quando chamamos
print()
do Derived
objeto derivado1 , o print()
de Derived
é executado substituindo a função em Base
. Como podemos ver, a função foi substituída porque chamamos a função de um objeto do
Derived
classe. Se tivéssemos chamado o
print()
função de um objeto do Base
classe, a função não teria sido substituída.
// Call function of Base class
Base base1;
base1.print(); // Output: Base Function
Acessar função substituída em C++
Para acessar a função substituída da classe base, usamos o operador de resolução de escopo
::
. Também podemos acessar a função substituída usando um ponteiro da classe base para apontar para um objeto da classe derivada e, em seguida, chamar a função desse ponteiro.
Exemplo 2:função substituída de acesso C++ à classe base
// 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;
}
Saída
Derived Function Base Function
Aqui, esta afirmação
derived2.Base::print();
acessa o
print()
função da classe Base. Exemplo 3:C++ Chamada de função substituída da classe derivada
// 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;
}
Saída
Derived Function Base Function
Neste programa, chamamos a função sobrescrita dentro do
Derived
classe em si.
class Derived : public Base {
public:
void print() {
cout << "Derived Function" << endl;
Base::print();
}
};
Observe o código
Base::print();
, que chama a função substituída dentro do Derived
classe. Exemplo 4:função substituída de chamada C++ usando ponteiro
// 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;
}
Saída
Base Function
Neste programa, criamos um ponteiro de
Base
tipo chamado ptr . Este ponteiro aponta para o Derived
objeto derivado1 .
// pointer of Base type that points to derived1
Base* ptr = &derived1;
Quando chamamos o
print()
função usando ptr , ele chama a função substituída de Base
.
// call function of Base class using ptr
ptr->print();
Isso ocorre porque, embora ptr aponta para um
Derived
objeto, na verdade é de Base
modelo. Então, ele chama a função de membro de Base
. Para substituir o
Base
função em vez de acessá-la, precisamos usar funções virtuais no Base
classe. Linguagem C