Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> Linguagem C

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

  1. Operadores C++
  2. Comentários C++
  3. Passando array para uma função na programação C++
  4. Funções C++ com exemplos de programas
  5. C - Funções
  6. Visão geral do C++
  7. Constantes/literais C++
  8. Operadores em C++
  9. Números em C++
  10. Sobrecarga de C++ (operador e função)